欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > C#面试问题41-60

C#面试问题41-60

2025/6/6 15:39:01 来源:https://blog.csdn.net/h6h26169i10l34fsgrh/article/details/148336189  浏览:    关键词:C#面试问题41-60
41. What is the Singleton design pattern?

Singleton is a class that only allows creating a single instance of itselt.

单例设计模式是一个类,它只允许创建自己的单个实例。

构造函数防止他在单例类以外的地方被调用。

使用情景:need a single object resposible for some job that is shared by the whole application.

What is a globl state? public 

Why is singleton considered an anti pattern?

What is the difference between the singleton design pattern and the application singleton?应用程序单例模式:不同位置使用的单个对象,不强制执行其单例。

42. What is the Builder design pattern? 

What are the benefits of using the Builder design pattern? 允许逐步构建对象。它有助于将复杂的构建逻辑封装在单独的类中。它提 高了可读性,尤其是在构造函数需要很多参数的情况下。

What are the downsides of  using the Builder design pattern? 这需要大量的额外代码,这些代码有部分与我们构建的类的代码重复。 这会导致遗漏某些必需的构建参数的风险。此外,这还会造成误将某些属 性设置两次的风险,从而导致属性被覆盖。

What does the "with" keyword do? 它用于创建一条记录的副本,并将其中某些特定字段设置为 新值

43. What is the Adapter design pattern?

What design pattern would you use if you had some interface incompatible with your needs, and you would like to adjust it? 适配器设计模式,因为它能够将一个类的接口转换为客户端所期望的接口

44. What is the Bridge design pattern?

What is "composition over inheritance"? 这是一个原则,它指出通过使用组合 而非继承来设计多态且可复用的代码会更好

45. What is the Fatory Method design pattern?

它将对象的创建与对象的使用分离开来,这样在引入新类型的对象时,可以 独立于其余代码对逻辑进行修改,从而使修改变得更容易。

What is the Static Factory Method design pattern? 是一种用于创建对象的方法。它通常作为公共构造函数的替代 方案,主要用于提高代码的可读性

What are the benefits of using Fatory Method design pattern? 关注点分离(在此情况下,将创建对象的过程与使用对象的过程分开),避免代 码重复并降低耦合度

What is the separation of Concerns? 关注点分离是一种设计原则,旨在将代码划分为不同的部分,使得每一部分都 处理一个单独的关注点

46. What is the "S" in the SOLID principles

一个类应当只负责一项职责。有时也会使用另一种定义:一个 类不应有超过一个的修改原因

How to refactor a class that is known to be breaking the SRP? 应当识别出不同 的职责,并将每个职责移至单独的类中。然后应定义这些类之间的交 互,理想情况下,由一个类依赖于另一个类实现的接口。 

47. What is the "O" in the SOLID principles?

我们应当以这样一种 方式设计代码:如果需要进行更改,可以通过添加新代码来实现,而不是修改 现有的代码

What are the good reasons to modify a class, disregarding the Open-Closed Principle? 首先,是为了解决错误。其次,有时严格遵循开闭原则(OCP)可能会“用 力过猛”——当它产生大量超级抽象的代码,带来的复杂性超过了开闭 原则所减少的复杂性 

48. What is the "L" in the SOLID principles?

里氏替换原则。该原则指出,我们应 当能够在不知情的情况下用派生类型替换基类型,并且不会导致任何意外 的结果

Who is the author of the LSP? 她是芭芭拉·利斯科夫,历史上第二位获得图灵奖的女性

49. What is the "I" in the SOLID principles?

接口隔离原则(有时也称为 ISP)。该 原则指出,接口的使用者不应被迫依赖于他们不使用的那些方法。 

What is the difference between the Liskov Substitution Principle and the Interface Segregation Principle? LSP(里氏替换原则)告诉我们如何实现基类的接口。ISP(接口隔离原则) 则告诉我们是否应该实现这个接口

50. What is the "D" in the SOLID principles?

What's the difference between Dependency Inversion and Dependency Injection?  依赖注入简单来说,这是一种从外部(通常通过构造 函数)向类提供依赖项的技术,而不是在该类内部创建这些依赖项。依赖注入是一种提供依赖项的机制,而依赖倒置原则则表明一个类 应该依赖于抽象。遵循依赖倒置原则时“分离”出来的依赖项,可以通过依赖 注入来提供

51. What is the difference between Tuples and ValueTuples?

当我想创建一个需要返回两条信息的方法时,问题在于,我无法从一个函数中返回两个值。如果我想这么做,我可以声 明一个特殊的类型,将sum与count捆绑在一起: 

Tuple<int,int> GetSummaryAboutCollection(IEnumerable<int> values)
{var sum = values.Sum();var count = values.Count();return new Tuple<int, int>(sum, count);
}

这段代码将输出 False,元组(tuple)是引用类型,因为这两个元组是不同的对象,具有 不同的引用。== 运算符比较的是引用,并且发现它们不相等: 

 

● 元组是引用类型,值元组是值类型。当大量短生命周期的元组被创 建时,可能会降低应用程序的性能,因为引用类型的内存管理比值 类型的内存管理要求更高。

● 元组是不可变的,值元组是可变的

● ValueTuples 提供了一种方便的语法用于创建

● 在元组中,所有属性都命名为 Item1、Item2 等。值元组可以有命名字段。

● 元组具有属性,值元组具有字段

● 值元组可以轻松声明包含超过 8 个元素,编译器会将其转换为包含 8 个元 素的值元组,最后一个元素为“Rest”字段,用于保存多余的元素。对 于元组,我们也可以这样做,但必须手动设置“Rest”属性。 

Is it possible to have a tuple with more than 8 elements? 元组最多只能容纳 8 个元素,不过,我们可以通过将多余的数据存储在最后 一个名为(例如)“Rest”的属性中来绕过此限制,该属性本身也是一个元组,从 而使我们的元组嵌套起来。对于元组来说,这相当别扭,但对于 ValueTuples,编 译器会给我们一些帮助——它允许我们像元组真的包含超过 8 个元素那样 使用它,例如通过使用 Item12 字段。在幕后,编译器会将此转换为对 tuple. Rest.Item5 的使用

57. What are delegates?

除了“delegate”关键字外,委托声明看起来与方 法声明相同——首先是返回类型,然后是名称,最后是参数列表。

可以调用委托,执行存储在其中的函数:

我们可以将多个函数存储在同一个委托类型的变量 中

我们还可以使用“+=”运算符将另一个方法链接到委托变量:持有对多个函数引用的委托变量称为多播委托。 当我看到 `Func <CommandType, bool>` 时,我就知道这个函数的输入是 `CommandType`,也 知道它返回的是一个 `bool` 类型(而且我可以合理推测这可能是一个布尔值, 告诉我命令执行是否成功)。

 此外,在某些情况下,我们确实必须使用自定义委托,而不是使用 Func 或 Action。 其中一个例子是,当我们想将其用于带有 ref 或 out 参数的方法时,这是无法使用 Func 实现的:

同样,Func 不能有可选参数,而自定义委托可以:

此外,我们不能使用带有 params 参数的 Func,但我们可以使用自定义委托: 

What is the difference between a Func and a delegate? ,Func 也是一种委托,只是它是微软定义的 ,不是我们。更确切地说,Func 是一个泛型委托,用于表示具有给定参 数和返回类型的任何函数。委托的概念比 Func 更广泛——我们可以定义任何 我们想要的委托,而且它根本不需要是泛型的。

What is a multicast delegate?

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词