c# - 如何在子类中创建动态类型并分配它?

标签 c#

起初,我有一个像这样的父类:

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/

相关文章:

c# - NEST for ElasticSearch - 检索数据时出现 JSONSerializationException

c# - 使用 API 邀请 ShareFile 用户加入跑道工作区

c# - 默认(T)与 Activator.CreateInstance(T)

c# - 如何在不知道文件类型或文件名的情况下下载文件?

c# - Akka 网络集成测试

c# - 使用局部变量重构的最佳实践

c# - silverlight/wp7 : modify string being bound to XAML

c# - 检查两个未知类型的对象是否相等,比较它们的所有字段

c# - 如何从 C# 项目的 Resources 文件夹中检索图像

c# - 如何避免同时在表上工作的两个(或更多)线程不在同一行上工作?