当前位置: 首页 > news >正文

C#面试问题81-100

85. What are anonymous types?

匿名类型是在需要的地方直接定义的类型,甚至都 不给它命名。它非常适合我们这种用例——类型小且临时,而且我们无意在其 他地方使用它

  1. 匿名类型是直接从 System.Object 派生的类对象。它们不能转换为任何 其他类型。
  2. ● 它们重写了 `Equals` 和 `GetHashCode` 方法以支持基于值的相等性。具 有相同值的两个匿名对象将具有相同的哈希码,并且 `Equals` 方法将 返回 `true`。请注意,`==` 运算符未被重载,因此它将返回 `false` (因为它们的引用不同)。
  3. ● 它们支持使用“with”关键字进行非破坏性修改。记住:非破坏性修 改不是改变原始对象,而是创建一个具有修改后值的新对象。

Can we modify the value of an anonymous type property? 否。所有匿名类 型的属性都是只读的

When should we, and should we not use anonymous types? 匿名类型的最佳使用场景是当我们想要使用的类型简单且仅限于某个 特定上下文,并且不会在其他地方使用时。它通常在复杂的 LINQ 查询 中用作临时对象。如果类型复杂或者我们想要重复使用它,就不应该使 用匿名类型。此外,匿名类型只能提供只读属性;它们不能有方法、字段、 事件等,所以如果需要这些功能,匿名类型就不适用了

Are anonymous types value or reference types? 它们是引用类型,因为它们是类,但它们通过 `Equals` 方法支持基于值的 相等性比较。换句话说,即使两个匿名对象的引用不同,只要它们的属性值 相同,`Equals` 方法也会认为它们相等

92. What is the Observer design pattern?
var bitcoinPriceReader = new BitcoinPriceReader();var emailPriceChangeNotifier = new EmailPriceChangeNotifier(25000);
bitcoinPriceReader.AttachObserver(emailPriceChangeNotifier);var pushPriceChangeNotifier = new PushPriceChangeNotifier(40000);
bitcoinPriceReader.AttachObserver(pushPriceChangeNotifier);bitcoinPriceReader.ReadCurrentPrice();
bitcoinPriceReader.ReadCurrentPrice();Console.WriteLine("Push notifications OFF");
bitcoinPriceReader.DetachObserver(pushPriceChangeNotifier);bitcoinPriceReader.ReadCurrentPrice();Console.ReadKey();//首先,让我们定义 IObserver 接口,该接口将由电子邮件价格变化通知器和推送价格变化通知器实现。
public interface IObserver<TData>
{void Update(TData data);
}public interface IObservable<TData>
{void AttachObserver(IObserver<TData> observer);void DetachObserver(IObserver<TData> observer);void NotifyObservers();
}//可观察对象:读取价格
public class BitcoinPriceReader : IObservable<decimal>
{private decimal _currentBitcoinPrice;//。首先,我们需要定义一个观察者集合:private List<IObserver<decimal>> _observers = new List<IObserver<decimal>>();public void AttachObserver(IObserver<decimal> observer){_observers.Add(observer);}public void DetachObserver(IObserver<decimal> observer){_observers.Remove(observer);}//NotifyObservers 方法将简单地遍历观察者列表,并使用 _currentBitcoinPrice对其执行 Update 方法:public void NotifyObservers(){foreach (var observer in _observers){observer.Update(_currentBitcoinPrice);}}public void ReadCurrentPrice(){_currentBitcoinPrice = new Random().Next(0, 50000);NotifyObservers();}
}//观察者:等待接收价格变动通知的类
public class EmailPriceChangeNotifier : IObserver<decimal>
{private readonly decimal _notificationThreshold;public EmailPriceChangeNotifier(decimal notificationThreshold){_notificationThreshold = notificationThreshold;}public void Update(decimal currentBitcoinPrice){if (currentBitcoinPrice > _notificationThreshold){Console.WriteLine($"Sending an email saying that " +$"the Bitcoin price exceeded {_notificationThreshold} " +$"and is now {currentBitcoinPrice}\n");}}
}public class PushPriceChangeNotifier : IObserver<decimal>
{private readonly decimal _notificationThreshold;public PushPriceChangeNotifier(decimal notificationThreshold){_notificationThreshold = notificationThreshold;}public void Update(decimal currentBitcoinPrice){if (currentBitcoinPrice > _notificationThreshold){Console.WriteLine($"Sending a push notification saying that " +$"the Bitcoin price exceeded {_notificationThreshold} " +$"and is now {currentBitcoinPrice}\n");}}
}

In the Observer design pattern, what is the Observable and what is the Observer? 可观察对象是被观察者所观察的对象。可观察对象会将自身状态的变化 通知给观察者

http://www.lqws.cn/news/109945.html

相关文章:

  • RabbitMQ如何保证消息可靠性
  • C++实现图形化2048小游戏
  • web第八次课后作业--分层解耦
  • 【刷机】从pixel刷回miui12的过程记录
  • JS语法笔记
  • Office文档图片批量导出工具
  • 如何安装huaweicloud-sdk-core-3.1.142.jar到本地仓库?
  • Microsoft前后端不分离编程新风向:cshtml
  • SoloSpeech - 高质量语音处理模型,一键提取指定说话人音频并提升提取音频清晰度和质量 本地一键整合包下载
  • 博客操作规范
  • 书籍在其他数都出现k次的数组中找到只出现一次的数(7)0603
  • 【最新版】西陆洗车系统源码全开源+uniapp前端+搭建教程
  • 接口自动化测试之pytest 运行方式及前置后置封装
  • 【AI学习从零至壹】基于深度学习的⽂本分类任务
  • 红外遥控器接收实验:Simulink应用层开发
  • Unity Shader编程】之高级纹理
  • Lua和JS的继承原理
  • SAP学习笔记 - 开发20 - 前端Fiori开发 Nest View(嵌套视图) ,Fragment(片段)
  • 吞咽与营养并重:进行性核上性麻痹的饮食之道
  • 什么是“音节”?——语言构成的节拍单位
  • FreeRTOS,其历史争议、兼容性、生态、未来展望
  • MYSQL索引详解及索引优化、分析
  • MyBatis常用注解全解析:从基础CRUD到高级映射
  • RL中的熵机制:策略熵坍缩分析与协方差正则化方法
  • 【FreeRTOS#1】多任务处理任务调度器任务状态
  • 【计算机网络 第8版】谢希仁编著 第六章应用层 题型总结1 编码
  • 队列的讲解:C++队列的使用
  • C++ set数据插入、set数据查找、set数据删除、set数据统计、set排序规则、代码练习1、2
  • 6月2日day43打卡
  • 【Python进阶】元类编程