【问题标题】:Is there a way to initialize EII property within constructor?有没有办法在构造函数中初始化 EII 属性?
【发布时间】:2020-10-29 11:48:55
【问题描述】:

让我们从 MS 页面的代码开始:

interface ILeft
{
    int P { get;}
}
interface IRight
{
    int P();
}

class Middle : ILeft, IRight
{
    public int P() { return 0; }
    int ILeft.P { get { return 0; } }
}

我想改变Middle这样的方式,EII属性一旦初始化,像这样:

class Middle : ILeft, IRight
{
    public int P() { return 0; }
    int ILeft.P { get; }

    Middle()
    {
        ILeft.P = 0;    
    }
}

以上代码无法编译,因此我的问题是 - 是否有 语法 可以做到这一点?

我问的是语法,因为蛮力方法是声明私有字段并重定向 ILeft.P getter 以从中返回数据。

【问题讨论】:

  • 简而言之 - 没有这样的语法。

标签: c# constructor initialization explicit-interface


【解决方案1】:

我认为除了您建议的使用支持字段而不是自动属性的方法之外,唯一的其他可能性是使用属性初始化器语法,例如:

int ILeft.P { get; } = 0;

当然,您不能基于传递给构造函数的参数进行初始化,因此它只能提供有限的额外灵活性。

(有一个建议将“primary constructors”添加到 C# 语言中,这可能可以初始化基于 get-only 显式实现的接口属性关于构造函数参数,但据我所知,它没有包含在语言中的时间表,所以我不会屏住呼吸......)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2021-02-28
    • 2010-12-16
    • 1970-01-01
    • 2021-04-13
    • 2021-05-21
    相关资源
    最近更新 更多