父通配符变量多态设置为其任何子类型c#
我想将一个变量设置为它的任何子类型。用代码更好地解释 如果我有:父通配符变量多态设置为其任何子类型c#,c#,C#,我想将一个变量设置为它的任何子类型。用代码更好地解释 如果我有: public class B : A { public int bCounter; } public class C : A { public int cCounter; } 我想: A myVarible; if (someCondition) { A = new B(); A.bCounter++; } if (someOtherCondition) { A = new C();
public class B : A {
public int bCounter;
}
public class C : A {
public int cCounter;
}
我想:
A myVarible;
if (someCondition) {
A = new B();
A.bCounter++;
}
if (someOtherCondition) {
A = new C();
A.cCounter++;
}
将父项设置为通配符变量,而不是设置所有可能的子项类型。
这种快捷方式或类似方式是否可行?由于变量
myVariable
的类型为A
,因此无法使用派生类型成员对其进行寻址。(A
不知道B
成员。)根据您的情况,有多种选择
如果对A
没有控制权,或者业务逻辑需要它,则可能需要重新声明变量以使其进行编译
if (someCondition) {
var b = new B();
b.bCounter++;
myVariable = b;
}
if (someOtherCondition) {
var c = new B();
c.cCounter++;
myVariable = c;
}
如果这样做有意义,您可以在a
上生成一个方法,以IncrementCounter()
:
这反过来又可以简化业务逻辑:
A myVariable;
if (someCondition) {
myVariable = new B();
}
if (someOtherCondition) {
myVariable = new C();
}
myVariable.IncrementCounter();
您的示例可能是
myVarible=new B();myVarible.bCounter++代码>感谢您的回答,这两个声明var b=new b()代码>和var c=new B()代码>是我想要避免的,对于任何可能的子类型赋值都只有一个声明。看来这是不可能的。谢谢
A myVariable;
if (someCondition) {
myVariable = new B();
}
if (someOtherCondition) {
myVariable = new C();
}
myVariable.IncrementCounter();