C#类初始化不同的参数?
我有一堂课,我用正常的public Class1(int arg1, int arg2, int arg3) { ... }
进行初始化,这很简单。 但是我想实现的是参数需要改变。 例如,如果您将1
传递给arg1
,则第二个和第三个参数不会采用Int而是采用float。C#类初始化不同的参数?
是否可以在C#.NET Core中完成? 如果不是,那么C#中是否有可能? 又如何?
你为什么不只是创建两个不同的重载构造这样的:
public Class1(int arg1, int arg2, int arg3) {
if(arg1 == 1) {
throw new InvalidOperationException("Wrong constructor");
}
...
}
public Class1(int arg1, float arg2, float arg3) {
if(arg1 != 1) {
throw new InvalidOperationException("Wrong constructor");
}
...
}
或者,如果你喜欢它,没有例外容易一点(这将是我的首选方式):
public Class1(int arg1, float _arg2, float _arg3) {
if(arg1 != 1) { // Your int constructor, use arg2 and arg3 vars declared below
int arg2 = (int) _arg2;
int arg3 = (int) _arg3;
...
} else {
// Your float constructor, use the _arg2 and _arg3 as your floats
...
}
}
您想要的解决方案,以改变变量es在运行时是不可能的,但我认为我发布的最后一个代码非常接近。
很好解释,谢谢!那样做了。但浮动物只是一个例子。我正在采取字符串或整数。但第一种选择正是我所期待的。 –
可以重载的构造函数
public Class1(int arg1, float arg3)
如果这样做了,那么消费者可以决定使用哪个超载,而不考虑arg1的值。 –
所以我找到了另一个答案。
您可以使用所有参数创建一个构造函数,然后允许它们为null,然后检查哪些元素为null,哪些是设置的。
可能不是做的最好的方式,但它的作品...不是要去使用它,但只要一想到它......
这听起来像你问的是构造函数重载。你可以在你的对象上创建许多不同的构造函数。 – David
这听起来像一个奇怪的事情 - 为什么你需要使类型依赖于第一个参数?为什么不创建不同的重载(并跳过第一个参数)? – UnholySheep
不,这是不可能的。你可能想描述你想要达到的目标,我们可以帮助你选择其他方法。 –