[英]Force Interface/Class to define a string variable in Derived Class?
我可以通過一個例子來最好地說明這個問題。
我有一個強制開發人員實現特定功能的接口。 我還希望該接口強制用戶實現set或get屬性,該屬性在存儲在類中的字符串中設置派生類的名稱。 因此,如果開發人員創建了一個從該接口派生的新類,則他們將被迫:
- 創建方法的定義。
- 將派生類的名稱存儲在名為“ derivedType”的字符串中
我想將名稱存儲為派生類型中的字符串,因為我想在運行時對實現此接口的對象進行類型檢查。
public interface someInterface
{
int someMethod(int x);
string derivedType {get; set;}
}
public derivedClass : someInterface
{
public int someMethod (int x) {...};
public string derivedType
{
get {return this.derivedType;}
set {derivedType = "derivedClass";}
}
}
有兩件事-首先,您的示例實現不正確。 如果嘗試獲取derivedType
(因為它自己返回),它將引發StackOverflowException
。 通常,這里不需要二傳手:
public interface ISomeInterface
{
int SomeMethod(int x);
string DerivedType {get;}
}
public class DerivedClass : ISomeInterface
{
public int DomeMethod (int x) {...};
public string DerivedType
{
get {return "derivedType"; }
}
}
話雖這么說,沒有辦法強迫實施者正確地做到這一點。 如果要保證名稱正確,則可以使用反射而不是將其放入接口( object.GetType().Name
)中。
您應該改用GetType()
。
ISomeInterface myObject = new DerivedClass();
Type myType = myObject.GetType();
string typeName = myType.Name; // "DerivedClass"
嘗試這個:
public interface someInterface
{
int someMethod(int x);
string derivedType {get;}
}
public derivedClass : someInterface
{
public int someMethod (int x) {...};
public string derivedType
{
get {return "derivedType";}
}
}
即,使該屬性為只讀,並實現它以返回硬編碼的字符串。 根據需要進行重構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.