c# - 方法类型重载

标签 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
}

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

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

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

最佳答案

使用动态:

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

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

关于c# - 方法类型重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18632024/

相关文章:

c# - 更改模型中 OnPost 中的绑定(bind)属性无效

c# - 循环遍历文本框

c# - 以编程方式获取 case 语句中常量的值

c# - 系统找不到使用 X509Certificate2 指定的文件来连接 Azure 服务器中的 Google OAuth2.0

c# - 在 Windows 8 Metro App 中拖放图像

c# - 自定义从 Web API 接收的 JSON

c# - Entity Framework 6 GUID 作为主键 : Cannot insert the value NULL into column 'Id' , 表 'FileStore';列不允许空值

c# - Azure webjob 如何访问托管站点文件夹

c# - 如何从数组创建将生成重复键的字典

c# - 将 .exe 打包成 .vsix 并从 Visual Studio 扩展中调用