[英]Can separate access modifiers be specified for the get and set accessors of a property?
[英]Can Get/Set accessors of property to be in different interfaces?
我想要類似下一個的東西:
interface INamedObject
{
string Name { get; }
}
interface IRenamableObject : INamedObject
{
string Name { set; }
}
換句話說,我想創建兩個接口,其中一個包含屬性的get訪問器,另一個包含set訪問器。 我可以在C#中執行此操作嗎?
(代碼可以編譯,但是編譯器會發出以下警告:)
“ IRenamableObject.Name”隱藏繼承的成員“ INamedObject.Name”。 如果要隱藏,請使用new關鍵字。
你當然可以:
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);
這是個好主意嗎? 我不想在我的代碼中使用它。 在我看來,當您遇到這種奇怪的情況時,也許表明存在某個設計缺陷。 一種跡象表明,您確實會收到警告,其中一個界面中的Name
掩蓋另一個界面,因此您需要new
關鍵字,我通常認為這是一種解決方法,而不是解決方案。
請注意,接口可以完全彼此分離:
interface INamedObject
{
string Name { get; }
}
interface IRenamableObject
{
string Name { set; }
}
這將消除陰影問題。 它還將允許您擁有一個對象,該對象的Name
屬性是只寫的,這也有點奇怪...
中定義的屬性IRenamableObject
將隱藏在一個INamedObject
。 您需要使用
interface IRenamableObject : INamedObject
{
new string Name { get; set; }
}
是的,您可以在兩個不同的界面中具有“獲取”和“設置”屬性。
但是,主要問題是為什么您需要這種方式?
它可以編譯,並不意味着它是正確的設計。
interface INamedObject
{
string Name { get; }
}
interface IRenamableObject //: INamedObject No need to inherit
{
string Name { set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.