我可以在/*???*/
(以及firstclass
中的任何其他位置)放置一些东西,使其返回调用它的类的类型,而不会在继承该方法的每个类中覆盖它每次使用时都不会在(secondclass)
前加上前缀。什么基本上意味着this.GetType()
?
public class firstclass
{
private static /*???*/ current;
public static /*???*/ modifycurrent()
{
/*do stuff to current*/
return current;
}
}
public class secondclass : firstclass
{
//nothing concerning the above
}
//usage
secondclass a = new secondclass();
secondclass b = a.modifycurrent(); //<--no cast here
目标是secondclass
的每个实例共享secondclass
类型的变量。当我创建继承自firstclass
的第三,第四和第五类时,我不必重写所有这些方法(除了返回类型{firstclass
之外,它是modifycurrent()
中的内容的精确镜像。 {1}}不同)。例如,每种类型的表单都会跟踪先前打开的自身实例。
答案 0 :(得分:1)
听起来你想要使用奇怪的重复模板模式:
public class firstclass<T> where T:firstclass
{
private T current;
public T modifycurrent()
{
/*do stuff to current*/
return current;
}
}
public class secondclass : firstclass<secondclass>
{
//nothing concerning the above
}
请注意,我取消了static
,因为静态成员不会被继承。
你可以做的不是完全万无一失:
public class thirdclass : firstclass<secondclass>
{
//nothing concerning the above
}
和current
仍会返回secondclass
的实例。没有任何机制可以强制继承者使用自己的类型作为泛型参数。