我对同名的通用和非通用接口有问题。
我的代码:
public interface class IPacked {
// Methods
void PackFromDouble(double realNumber);
double ToDouble( );
};
generic<typename T> public interface class IPacked : public IPacked {
// Property
property T PackedValue {
virtual T get( );
virtual void set(T value);
}
};
我知道,它可以编译。我的朋友在旧团队项目中使用它。 但是,函数中不存在此问题。
答案 0 :(得分:3)
由于C ++语言规则,不支持它。从C++/CLI Language Specification,第31.1章:
泛型类型不得与任何其他泛型类型,模板,类,委托,函数同名, 对象,枚举,枚举器,命名空间或类型在同一范围内(C ++标准3.3),除了 在C ++标准的14.5.4中规定。除非通用函数可以由非泛型重载 具有相同名称的函数或具有相同名称的其他通用函数,通用名称 在命名空间范围或类范围内声明在该范围内应是唯一的。
C ++标准的第14.5.4章讨论了部分模板特化,没有什么可以帮助你。
作为一种解决方法,您可以考虑在C#程序集中声明接口并添加对它的引用。或者使用不同的命名空间,就像System :: Collections :: IEnumerable vs System :: Collections :: Generic :: IEnumerable&lt;&gt ;.