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

本文关键字:定义 字符串 变量 派生 接口 | 更新日期: 2023-09-27 18:32:31

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

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

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