问题描述
对不起,如果已经回答了(我在SO上找不到)。我们已经发布了.NET SDK库,该库公开了一种具有一般约束的方法。 我的目标是重载此方法,并公开具有不同泛型约束的另一种方法。
// This already exists in the SDK.
public T UpdateConfiguration<T>(T entity) where T : ISystemConfig
{
...
}
// This is our objective. Expose another method for users.
public T UpdateConfiguration<T>(T entity) where T : IDataConfig
{
...
}
显然,C#(.NET 4.7.2)不允许这样做。
编译器将引发错误:A member UpdateConfiguration<T>(T) is already defined. Rename this member or use different parameter types
。
来自Java背景,我对此错误感到惊讶。尽管我在重载此方法,但是参数/参数受另一种类型的约束。
下面是代码样本,以显示我的意思。 Java允许这样做,但C#不允许。
- https://ideone.com/7JeprD(Java-作品)
- https://ideone.com/fE3pxj(C#-不起作用)
按照最佳工程实践的最佳方式是什么?我不想将方法重命名为UpdateConfiguration2
,因为我们想在我们的SDK中为消费者保持一些统一性。
正如编译器建议的那样,更改参数类型是唯一的解决方案吗?
T UpdateConfiguration(ISystemConfig entity)
和T UpdateConfiguration(IDataConfig entity)
?
第二个选项将撤消类型推断的某些优点。当前,UpdateConfiguration(SomeType obj)
会将T
推断为SomeType
。通过更改参数(第二个选项),我必须每次都要UpdateConfiguration<SomeType>(SomeType obj)
来推断T
。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)