我创建了一个具有静态属性的通用接口,但实现该接口的类似乎无法访问该属性或将其公开给其他代码。
例如,下面的代码将无法编译,因为
TestClass.Empty
无法解析。 我希望并期望有人可以向我解释为什么会这样,以及是否有办法修改代码来完成我所期望的事情,这样实现 IEmpty
接口的类不需要添加任何代码公开 Empty
属性。
public interface IEmpty<T> where T : class, new()
{
public static virtual T Empty { get; } = new ();
}
public sealed class TestClass : IEmpty<TestClass>
{
public bool IsEmpty => this == TestClass.Empty;
}
我确信这个解释是我应该知道的,但我想你会是那个告诉我它是什么的人。 预先感谢您。
如果您希望每个实现类都公开一个 Empty 属性,则需要在类中显式定义它:
public interface IEmpty<T> where T : class, new()
{
bool IsEmpty { get; }
}
public sealed class TestClass : IEmpty<TestClass>
{
public static TestClass Empty { get; } = new();
public bool IsEmpty => this == TestClass.Empty;
}