“动态”构造函数c#

时间:2018-02-05 22:29:10

标签: c# dynamic constructor

是否可以在c#中创建一种“动态”构造函数?那将基于构造函数输入创建自己,但实际上创建一个子类而不是“真正本身”? 我有类似的想法:

public NeuralNet(arg arg1, arg arg2....)
{
    NeuralNet specificNet;
    if(arg1==something){
        specificNet = new subClassFromNet(arg2...);
    }
    else if(arg1 == something){
        specificNet = new otherSubClassFromNet(arg2...);
    }
    ...

    this = specificNet;

}

或是否有必要创建这样的方法

public static NeuralNet CreateNet(arg arg1, arg arg2....)
{
    NeuralNet specificNet;
    if(arg1==something){
        specificNet = new subClassFromNet(arg2...);
    }
    else if(arg1 == something){
        specificNet = new otherSubClassFromNet(arg2...);
    }
    ...

    return specificNet;

}

设置超类构造函数中的所有属性对我来说不是一个可行的方法,因为子类的构造函数太大了。目前我实施了第二种方法,但我认为第一种方案更加用户友好。我认为它看起来更好。 我知道我可以在超类中创建几个构造函数但是由于某些原因我对这个特定方法是否可行感兴趣。 我很抱歉,如果这个问题已被提出但我没有找到答案,也不是我经验丰富的开发人员自己找到合适的方法。

1 个答案:

答案 0 :(得分:0)

你不能做“动态”构造函数。 C#不会让你像其他语言一样重载operator new。您必须使用静态构建器方法。

public static NeuralNet New(arg arg1, arg arg2....)

静态构建器方法的另一个好处是它们可以是异步的(而ctor必须始终是同步的)。     public static Task NewAsync(arg arg1,arg arg2 ....)//执行网络IO