接口继承

leo*_*ora 9 c# interface

如果我有一个界面:

interface IFoo
{
    int Offset {get;}
}
Run Code Online (Sandbox Code Playgroud)

我想要这个,可以吗:

interface IBar: IFoo
{   
    int Offset {set;}
}
Run Code Online (Sandbox Code Playgroud)

那么IBar的消费者将能够设定或获得?

Ant*_*nes 7

这很接近,但没有香蕉.

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)

注意newIBar中的关键字,但这会覆盖IFoo的get访问器,因此IBar没有get.因此,没有你不能实际创建IBar,只需添加一组,同时保持现有的get.


Arj*_*nbu 7

不,你不能!

(我正打算写"是",但在阅读了安东尼的帖子后,尝试了一些调整,我发现答案是否定的!)

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修饰符.谢谢安东尼!