C# C语言中具有零个或多个参数的泛型构造函数#
我想知道(在C#中)组合下面两个类的最佳方式是什么(这样我就可以选择指定类型还是不指定,如果不需要的话)?另外,如果有必要,对MyClass进行编码以接受更多参数的建议方法是什么?谢谢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
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,我说“工厂”对吗只调用泛型构造函数并返回实例?