C# - 访问通用接口中的静态属性

问题描述 投票:0回答:1

我创建了一个具有静态属性的通用接口,但实现该接口的类似乎无法访问该属性或将其公开给其他代码。

例如,下面的代码将无法编译,因为

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;
}

我确信这个解释是我应该知道的,但我想你会是那个告诉我它是什么的人。 预先感谢您。

c# generics interface properties static
1个回答
0
投票

如果您希望每个实现类都公开一个 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.