有没有办法在构造函数中初始化 EII 属性?
Is there a way to initialize EII property within constructor?
让我们从 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 重定向到 return 数据。
我认为除了您建议的使用支持字段而不是 auto-property 的方法之外,唯一的其他可能性是使用 属性 初始化语法,例如:
int ILeft.P { get; } = 0;
当然,你不能根据传递给构造函数的参数进行初始化,因此它只能提供有限的额外灵活性。
(有一个提案将“primary constructors”添加到 C# 语言,可能根据构造函数参数初始化 get-only 显式实现的接口 属性,但据我所知,没有将其包含在语言中的时间表,所以我不会屏住呼吸...)
让我们从 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 重定向到 return 数据。
我认为除了您建议的使用支持字段而不是 auto-property 的方法之外,唯一的其他可能性是使用 属性 初始化语法,例如:
int ILeft.P { get; } = 0;
当然,你不能根据传递给构造函数的参数进行初始化,因此它只能提供有限的额外灵活性。
(有一个提案将“primary constructors”添加到 C# 语言,可能根据构造函数参数初始化 get-only 显式实现的接口 属性,但据我所知,没有将其包含在语言中的时间表,所以我不会屏住呼吸...)