强制接口/类在派生类中定义字符串变量?

时间:2013-09-23 17:40:37

标签: c# class interface typechecking

我可以通过一个例子来说明这个问题。

我有一个强制开发人员实现特定功能的界面。我还希望这个接口强制用户实现一个set或get属性,该属性在类中存储的字符串中设置派生类的名称。因此,如果开发人员创建了一个派生自此接口的新类,他们将被迫:

  
      
  1. 为方法创建定义。
  2.   
  3. 将派生类的名称存储在名为“derivedType”
  4. 的字符串中   

我想将名称作为字符串存储在派生类型中,因为我想在运行时对实现此接口的对象执行某些类型检查。

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";}
   }
}

3 个答案:

答案 0 :(得分:4)

有两件事 - 首先,您的示例实现不正确。如果您尝试获取StackOverflowException(因为它自己返回),它会引发derivedType。一般来说,这里不需要设置器:

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)。

答案 1 :(得分:1)

您应该使用GetType()代替。

ISomeInterface myObject = new DerivedClass();
Type myType = myObject.GetType();
string typeName = myType.Name; // "DerivedClass"

答案 2 :(得分:0)

试试这个:

public interface someInterface
{
   int someMethod(int x);
   string derivedType {get;}
}

public derivedClass : someInterface
{
   public int someMethod (int x) {...};
   public string derivedType
   {
      get {return "derivedType";}
   }
}

即,将属性设置为只读,并实现它以返回硬编码字符串。必要时重构。