如果我有一个界面:
interface IFoo
{
int Offset {get;}
}
Run Code Online (Sandbox Code Playgroud)
我想要这个,可以吗:
interface IBar: IFoo
{
int Offset {set;}
}
Run Code Online (Sandbox Code Playgroud)
那么IBar的消费者将能够设定或获得?
这很接近,但没有香蕉.
interface IFoo
{
int Offset { get; }
}
interface IBar : IFoo
{
new int Offset { set; }
}
class Thing : IBar
{
public int Offset { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
注意new
IBar中的关键字,但这会覆盖IFoo的get访问器,因此IBar没有get.因此,没有你不能实际创建IBar,只需添加一组,同时保持现有的get.
不,你不能!
(我正打算写"是",但在阅读了安东尼的帖子后,尝试了一些调整,我发现答案是否定的!)
class FooBar : IFoo, IBar
{
public int Offset{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
(安东尼指出会产生警告,可以通过添加"新"关键字来修复.)
在尝试代码时:
IBar a = new FooBar();
a.Offset = 2;
int b = a.Offset;
Run Code Online (Sandbox Code Playgroud)
最后一行将生成编译错误,因为您隐藏了IBar的Offset setter.
编辑:修复了类中属性的accesibillity修饰符.谢谢安东尼!