簡體   English   中英

強制接口/類在派生類中定義字符串變量?

[英]Force Interface/Class to define a string variable in Derived Class?

我可以通過一個例子來最好地說明這個問題。

我有一個強制開發人員實現特定功能的接口。 我還希望該接口強制用戶實現set或get屬性,該屬性在存儲在類中的字符串中設置派生類的名稱。 因此,如果開發人員創建了一個從該接口派生的新類,則他們將被迫:

  1. 創建方法的定義。
  2. 將派生類的名稱存儲在名為“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM