c# - 基于类型的条件逻辑

标签 c# .net polymorphism

给定:

interface I
{
}

class B: I
{
}

class C: I
{
}

class A
{

    public void Method(B arg)
    {
    }

    public void Method(C arg)
    {
    }

    public void Method(I arg)
    {
       // THIS is the method I want to simplify.
       if (I is B)
       {
          this.Method(arg as B);
       }
       else if (I is C)
       {
          this.Method(arg as C);
       }
    }
}

我知道有更好的方法来设计这种类型的交互,但是因为 不可能详细说明这需要很长时间才能解释清楚。 由于此模式将重复多次,因此我想更换 具有通用实现的条件逻辑,我可以只使用一行。 我看不到实现此通用方法/类的简单方法,但我的直觉告诉我这应该是可能的。

如有任何帮助,我们将不胜感激。

最佳答案

我会把方法放在接口(interface)里面,然后让多态决定调用哪个方法

interface I
{
   void Method();
}

class B : I
{
   public void Method() { /* previously A.Method(B) */}
}

class C : I
{
   public void Method() { /* previously A.Method(C) */ }
}

class A
{
   public void Method(I obj)
   { 
     obj.Method();
   }
}

现在当你需要添加一个新的类时,你只需要实现I.Method。您无需触摸 A.Method。

关于c# - 基于类型的条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/173145/

相关文章:

java - 使用子类异常实现接口(interface)

c# - 为什么这个数据网格需要额外的绑定(bind)语法?

c# - Linq 结果到 IEnumerable 无效转换

c# - 在 .NET 中使用线程时出现 WebClient 错误

c++ - 如何强制两个函数参数具有相同的模板类型?

java - 具有不确定方法签名的抽象方法

c# - 这是使用泛型方法的好方法吗?

c# - ModelState 在非必需模型字段上返回 false

C# 随机数生成的通用方法

.net - 我可以使用 Albacore 任务转换 web.config 吗?