起初,我有一个像这样的父类:
public class Father {
// skip ...
}
这是两个继承自 Father
的类。但是 Method_A
只属于 Child_A
而不是 Child_B
。
public class Child_A : Father {
// skip ...
public void Method_A { ... }
}
public class Child_B : Father {
// skip ...
}
最后,我尝试创建一个可以动态赋值的变量
public class MyClass {
public Father dynamicObject;
public void MyMethod {
dynamicObject = new Child_A(); // Sometimes will be `Child_B`.
if (...) { // only `Child_A` can pass, I promise
dynamicObject.Method_A(); // Error here.
}
}
错误如下:
Type 'Father' does not contain a definition for 'Method_A' and no extension method 'Method_A' of type 'Father' could be found. Are you missing an assembly reference?
我已经为 dynamicObject
尝试了 var
类型,但我们必须在本地范围内设置 var
类型。
public class MyClass {
public var dynamicObject; // It's not allow.
// ...
}
最佳答案
使用强制转换检查dynamicObject
的类型:
Child_A childA = dynamicObject as Child_A;
if (childA != null)
{
childA.Method_A();
}
或使用 C# 6
和 Null 条件运算符:
Child_A childA = dynamicObject as Child_A;
childA?.Method_A();
也是
,可以使用显式(Child_A)
强制转换,但我更喜欢第一种方法。
if (dynamicObject is Child_A) {
((Child_A)dynamicObject).Method_A();
}
使用 C#7
和@Zbigniew 建议的模式匹配:
if (dynamicObject is Child_A child) {
child.Method_A();
}
关于c# - 如何在子类中创建动态类型并分配它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42550805/