可以获取/设置属性的访问器在不同的接口中吗?

Vas*_*sya 0 .net c# get set

我想要下一个:

interface INamedObject
{
    string Name { get; }
}

interface IRenamableObject : INamedObject
{
    string Name { set; }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我想创建两个接口,其中一个包含属性的get访问器和另一个 - set accessor.我可以用C#做​​这个吗?

(代码编译但编译器给出以下警告:)

'IRenamableObject.Name'隐藏继承的成员'INamedObject.Name'.如果要隐藏,请使用new关键字.

Fre*_*örk 5

你当然可以:

interface INamedObject
{
    string Name { get; }
}

interface IRenamableObject : INamedObject
{
    new string Name { set; }
}

class SomeObject : IRenamableObject
{
    public string Name { get; set;  }
}

// usage:
IRenamableObject obj = new SomeObject();
obj.Name = "some name";
Console.WriteLine((obj as INamedObject).Name);
Run Code Online (Sandbox Code Playgroud)

这是个好主意吗?我不希望它在我的代码中.在我看来,当你得到像这样的古怪时,也许它表明某处存在设计缺陷.一个迹象是,您确实收到一个警告,Name在其中一个界面中影响另一个,因此您需要new关键字,我通常认为这是一种解决方法而不是解决方案.

请注意,接口可以完全相互分离:

interface INamedObject
{
    string Name { get; }
}

interface IRenamableObject
{
    string Name { set; }
}
Run Code Online (Sandbox Code Playgroud)

这将删除阴影问题.它还允许你拥有一个Name只写属性的对象,这也是一个奇怪的...