繁体   English   中英

C#中包含零个或多个参数的泛型构造函数

[英]Generic Constructor with zero or more arguments in C#

我想知道下面结合我的两个类最好的方法(在C#中)(这样我可以选择是否指定一个类型,如果没有必要的话)? 如果有必要,还有什么建议的方法可以编码MyClass以获取更多参数? 谢谢!

public class MyClass{

    public MyClass() {}
}

public class MyClass<T> {

    T myvariable;   

    public MyClass<T>(T arg){       
        myvariable = arg;
    }

    // how can I handle MyClass(arg1, arg2, ....?
    // would I need to create classes MyClass<T,U,...> for each number of argument?
}

这样我就可以用两种方式来护理MyClass ......

MyClass my1 = new MyClass()
MyClass<string> my2 = new MyClass("test");

这样我就可以选择是否指定类型,如果没有必要的话

只需合并它们并创建两个构造函数:

class MyClass<T> {

    T myvariable;

    public MyClass(){

    }

    public MyClass(T arg){
        myvariable = arg;
    }
}

如果您不需要泛型类型,请使用Void void ):

public static void main(String[] args) {
    final MyClass<Void> my1 = new MyClass<Void>();
    final MyClass<String> my2 = new MyClass<String>("Test");
}

如有必要,编写MyClass以获取更多参数

如果需要可变数量的相同类型T的参数,请使用varargs:

class MyClass<T> {

    T[] myvariable;

    public MyClass(){

    }

    public MyClass(T... arg){
        myvariable = arg;
    }

}

没有办法声明可变数量的异类类型,如<T, U, V...>

您可以实现静态工厂方法以避免明确指定类型,例如

public static MyClass<Void> create() {
    return new MyClass<Void>() 
}

public static <T> MyClass<T> create(T type) {
    return new MyClass<T>(type); 
}

然后,客户端可以创建新的实例,如下所示:

MyClass<Void> noType = MyClass.create();
MyClass<String> withType = MyClass.create("some type");
MyClass<Integer> withInt = MyClass.create(123);

(如果您启用了自动装箱)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM