0

我可以用一个例子来最好地说明这个问题。

我有一个强制开发人员实现特定功能的接口。我还希望这个接口强制用户实现一个 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";}
   }
}
4

3 回答 3

4

有两件事 - 首先,您的示例实现不正确。StackOverflowException如果您尝试获取,它将引发 a 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)中。

于 2013-09-23T17:44:02.570 回答
1

你应该GetType()改用。

ISomeInterface myObject = new DerivedClass();
Type myType = myObject.GetType();
string typeName = myType.Name; // "DerivedClass"
于 2013-09-23T17:45:43.280 回答
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";}
   }
}

也就是说,将属性设为只读,并实现它以返回硬编码的字符串。根据需要进行重构。

于 2013-09-23T17:43:26.737 回答