好的...在 Objective C 中,您可以使用“new this()”从基类中的静态方法新建子类,因为在静态方法中,“this”指的是类,而不是实例。当我第一次发现它时,这是一个非常酷的发现,并且我经常使用它。
然而,在 C# 中这是行不通的。该死!
那么...有人知道如何从静态基类方法中“新建”子类吗?
像这样的东西...
public class MyBaseClass{
string name;
public static Object GimmeOne(string name){
// What would I replace 'this' with in C#?
return new this(name);
}
public MyBaseClass(string name){
this.name = name;
}
}
// No need to write redundant constructors
public class SubClass1 : MyBaseClass{ }
public class SubClass2 : MyBaseClass{ }
public class SubClass3 : MyBaseClass{ }
SubClass1 foo = SubClass1.GimmeOne("I am Foo");
是的,我知道我可以(通常会)直接使用构造函数,但我们有一个特定的需要调用基类上的共享成员,所以这就是我问的原因。再说一遍,Objective C 让我来做这件事。希望 C# 也能做到。
那么...有人接受吗?
C# 没有任何与此完全等同的东西。但是,您可以通过使用如下泛型类型约束来解决此问题:
public class MyBaseClass
{
public string Name { get; private set; }
public static T GimmeOne<T>(string name) where T : MyBaseClass, new()
{
return new T() { Name = name };
}
protected MyBaseClass()
{
}
protected MyBaseClass(string name)
{
this.Name = name;
}
}
new() 约束表示有一个无参数构造函数 - 您没有,但我们将其设为私有以向消费者隐藏它。然后可以像这样调用它:
var foo = SubClass1.GimmeOne<SubClass1>("I am Foo");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)