2

我想做这样的事情:

public static void Initialize<T>(T obj) where T : BaseClass
{
  SetDefault(obj);
}

private static void SetDefault(AInheritedFromBaseClass thing)
{
  // do something
}

private static void SetDefault(BInheritedFromBaseClass thing)
{
  // do something
}

因此,每次我初始化 obj 时,它都会被定向到正确的方法。那可能吗?

我无法在它自己的类上实现这些方法,因为它们是外部类。所以基本上我想有一种通用的方式来按照我想要的方式初始化它们。我想避免这样的事情:

if (obj is TypeA)
{
  ClassThis();
} else if (obj is TypeB)
{
  CallThat();
}
//etc.
4

2 回答 2

7

使用dynamic

public static void Initialize<T>(T obj) where T : BaseClass
{
    SetDefault((dynamic)obj);
}

它将强制您的方法重载选择发生在运行时而不是编译时。

于 2013-09-05T09:02:01.347 回答
0

如果它们是外部类并且您需要修改它们的初始化方式,我会使用Adapter 模式之类的东西,而不是想出解决方法。

此外,如果您想添加第三个BaseClass实现并忘记添加另一个SetDefault重载,您的解决方案将在运行时崩溃。你不应该依赖那个。

于 2013-09-05T09:06:54.650 回答