我可以通过一个例子来说明这个问题。
我有一个强制开发人员实现特定功能的界面。我还希望这个接口强制用户实现一个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";}
}
}
答案 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";}
}
}
即,将属性设置为只读,并实现它以返回硬编码字符串。必要时重构。