64得票8回答
如何在C#中实现“trait”设计模式?

我知道C#中没有这个特性,但PHP最近增加了一个叫做Traits的特性,一开始我觉得有点儿傻,但后来开始思考就不这么认为了。 假设我有一个基类叫做Client,Client有一个名为Name的属性。 现在我正在开发一个可重复使用的应用程序,将被许多不同的客户使用。所有客户都认为客户端应该有...

35得票8回答
从实现类调用C#接口默认方法

C# 8 支持在接口中使用默认方法实现。我的想法是将一个记录日志的方法注入到类中,就像这样:public interface ILoggable { void Log(string message) => DoSomethingWith(message); } public c...

34得票2回答
C# 8的默认接口实现允许多重继承吗?

根据https://blogs.msdn.microsoft.com/dotnet/2018/11/12/building-c-8-0/,C# 8 中的新特性之一是默认接口实现。这个新特性是否也能隐式地允许多重继承?如果不能,那么如果我尝试以下操作会发生什么:public interface ...

29得票6回答
默认接口方法。现在,抽象类和接口之间有什么深刻而有意义的区别?

我知道抽象类是一种特殊的类,不能实例化。抽象类只能被子类化(继承)。换句话说,它只允许其他类继承它,但它本身不能被实例化。优点是它可以为所有子类强制执行某些层次结构。简单来说,它是一种强制所有子类遵循相同层次结构或标准的契约。 我也知道接口不是类。它是由单词接口定义的实体。接口没有实现,它只...

21得票3回答
如何在继承的函数中重新定义具有实体的接口函数,而不进行覆盖?

有人可以解释为什么同一个类的相同函数表现不同吗? using System; public class HelloWorld { public static void Main(string[] args) { MyUpperScript mAsdfScri...

20得票1回答
C# 8.0默认接口成员的意外行为

考虑以下代码:interface I { string M1() => "I.M1"; string M2() => "I.M2"; } abstract class A : I {} class C : A { ...

17得票2回答
接口中的默认实现未被编译器识别?

这是我的一个C#项目中的代码,目标是 .NET Core 3.0(因此我应该在 C# 8.0 中编写)。我使用的是 Visual Studio 2019 (16.3.9)。public interface IJsonAble { public string ToJson() =>...

15得票2回答
何时应该在C#中使用默认接口方法?

在C# 8及以后的版本中,我们拥有默认接口方法,因此: 这难道不破坏了接口的原则吗? 何时应该使用默认接口方法而不是基类(抽象类)?

15得票1回答
具有默认实现的接口和抽象类之间有什么区别?

C# 8.0引入了一个新的语言特性——接口成员的默认实现。public interface IRobot { void Talk(string message) { Debug.WriteLine(message); } } 新的默认接口实现提供了tra...

12得票3回答
一个C#的类能否从自己的实现中调用一个接口的默认接口方法?

如果我有一个默认接口方法,像这样: public interface IGreeter { void SayHello(string name) => System.Console.WriteLine($"Hello {name}!"); } 我能让我的具体实现调用那个默认...