Mar*_*eIV 3 c# constructor subclass objective-c static-members
好的......在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");
Run Code Online (Sandbox Code Playgroud)
是的,我知道我可以(并且通常会)直接使用构造函数,但我们特别需要在基类上调用共享成员,这就是我要问的原因.再一次,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;
}
}
Run Code Online (Sandbox Code Playgroud)
new()约束说有一个无参数的构造函数 - 你没有这个构造函数,但是我们将它私有化以隐藏消费者.然后它可以像这样调用:
var foo = SubClass1.GimmeOne<SubClass1>("I am Foo");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2375 次 |
| 最近记录: |