方法类型重载

Der*_*Ape 2 c#

我想做这样的事情:

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
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我初始化obj时,它都会指向正确的方法.那可能吗?

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

if (obj is TypeA)
{
  ClassThis();
} else if (obj is TypeB)
{
  CallThat();
}
//etc.
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 7

用途dynamic:

public static void Initialize<T>(T obj) where T : BaseClass
{
    SetDefault((dynamic)obj);
}
Run Code Online (Sandbox Code Playgroud)

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