C# C语言中具有零个或多个参数的泛型构造函数#

C# C语言中具有零个或多个参数的泛型构造函数#,c#,class,generics,C#,Class,Generics,我想知道(在C#中)组合下面两个类的最佳方式是什么(这样我就可以选择指定类型还是不指定,如果不需要的话)?另外,如果有必要,对MyClass进行编码以接受更多参数的建议方法是什么?谢谢 public class MyClass{ public MyClass() {} } public class MyClass<T> { T myvariable; public MyClass<T>(T arg){ m

我想知道(在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(){}
}
公共类MyClass{
myt变量;
公共MyClass(T arg){
myvariable=arg;
}
//我如何处理MyClass(arg1,arg2。。。。?
//我是否需要为每个参数数创建类MyClass?
}
这样我就可以用任何一种

MyClass my1 = new MyClass()
MyClass<string> my2 = new MyClass("test");
MyClass my1=新的MyClass()
MyClass my2=新的MyClass(“测试”);
因此,我可以选择指定类型或不指定类型,以防不需要指定类型

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

class MyClass<T> {

    T myvariable;

    public MyClass(){

    }

    public MyClass(T arg){
        myvariable = arg;
    }
}
编写MyClass以在必要时接受更多参数

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

class MyClass<T> {

    T[] myvariable;

    public MyClass(){

    }

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

}
class-MyClass{
T[]myvariable;
公共MyClass(){
}
公共MyClass(T…arg){
myvariable=arg;
}
}
没有办法声明不同数量的异构类型,如

因此,我可以选择指定类型或不指定类型,以防不需要指定类型

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

class MyClass<T> {

    T myvariable;

    public MyClass(){

    }

    public MyClass(T arg){
        myvariable = arg;
    }
}
编写MyClass以在必要时接受更多参数

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

class MyClass<T> {

    T[] myvariable;

    public MyClass(){

    }

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

}
class-MyClass{
T[]myvariable;
公共MyClass(){
}
公共MyClass(T…arg){
myvariable=arg;
}
}

没有办法声明不同数量的异构类型,例如

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

public static MyClass<Void> create() {
    return new MyClass<Void>() 
}
publicstaticmyclass创建(){
返回新的MyClass()
}

公共静态MyClass创建(T类型){
返回新的MyClass(类型);
}
然后,客户端可以创建新实例,如下所示:

MyClass<Void> noType = MyClass.create();
MyClass<String> withType = MyClass.create("some type");
MyClass<Integer> withInt = MyClass.create(123);
MyClass-noType=MyClass.create();
MyClass withType=MyClass.create(“某些类型”);
MyClass withInt=MyClass.create(123);

(前提是启用了自动装箱)。

可以实现静态工厂方法,以避免显式指定类型,例如

public static MyClass<Void> create() {
    return new MyClass<Void>() 
}
publicstaticmyclass创建(){
返回新的MyClass()
}

公共静态MyClass创建(T类型){
返回新的MyClass(类型);
}
然后,客户端可以创建新实例,如下所示:

MyClass<Void> noType = MyClass.create();
MyClass<String> withType = MyClass.create("some type");
MyClass<Integer> withInt = MyClass.create(123);
MyClass-noType=MyClass.create();
MyClass withType=MyClass.create(“某些类型”);
MyClass withInt=MyClass.create(123);

(前提是您启用了自动装箱)。

有没有办法避免强制用户键入,比如可以忽略它?您对多个参数有什么建议?谢谢您的回复!@user1229895:如果您只需使用
new MyClass()
它将隐式使用
对象
作为
T
。还可以查看我的更新wrt多个参数。谢谢,我看到我必须使用params将其保存在数组中(顺便说一句,我认为您编写的签名中缺少了它)。非常感谢!@user1229895:您能澄清我的错误在哪里吗?我写了
T[]myvariable;
T…arg
-它在发布之前用来编译;-)。我猜有点混乱;-),我想当我应该指定c#时,有人在Java下标记了我的帖子……我想c#下的varargs应该包含一个params关键字有没有办法避免强制用户键入,比如可以忽略它?你对不止一个论点有什么建议吗?谢谢你的回复@user1229895:如果只使用
newmyclass()
它将隐式地使用
对象
作为
T
。还可以看到我的更新wrt多个参数。谢谢,我看到我必须使用params将其保存在一个数组中(顺便说一句,我想你写的签名中缺少了它?)。非常感谢@用户1229895:你能澄清我的错误在哪里吗?我编写了
T[]myvariable
T。。。arg
-用于在发布前编译;-)。我想有点混乱;-),我想当我应该指定c#时,有人在Java下标记了我的帖子……我想c#下的varargs应该包含一个params关键字谢谢Erich,我说“工厂”只调用泛型构造函数并返回实例对吗?谢谢Erich,我说“工厂”对吗只调用泛型构造函数并返回实例?