为何C# 11接口静态成员未被强制实现?附强制实现方法
如何强制实现C#接口中的静态成员?
在C# 11和.NET 7版本中,接口支持定义静态成员,但默认情况下,实现接口的类并不会被强制实现这些静态成员。比如你定义的这个接口:
public interface IHasInstance<T> { static T Instance { get; set; } }
实现该接口的类即使不编写对应的静态属性(比如下面这种),编译器也不会报错:
internal static MyClass Instance { get; } = new();
要让实现接口的类必须强制实现接口中的静态成员,只需要给接口里的静态成员加上abstract修饰符即可。修改后的接口代码如下:
public interface IHasInstance<T> { abstract static T Instance { get; set; } }
此时,任何实现IHasInstance<T>的类都必须提供对应的静态Instance属性实现,否则编译器会抛出错误。比如正确的实现类代码:
public class MyClass : IHasInstance<MyClass> { public static MyClass Instance { get; set; } = new(); }
内容的提问来源于stack exchange,提问作者IneedHelp
相关产品推荐
相关产品推荐

