我有C ++ / CLI代码,如下所示:
interface class Type
{
};
public ref class Type1 : Type
{
public:
double a;
};
public ref class Type2 : Type
{
public:
double b;
};
generic <typename T> where T:Type
array<T>^ TestClass::TestFunction()
{
array<T>^ result = gcnew array<T>(1);
result[0].b = 10.0;
return result;
}
Type1
和Type2
没有任何共同之处,因此我没有在Type
中保留任何内容来实施。它仅用于泛型语法,我创建了Type
。
当我尝试使用TestFunction
或Type1
致电Type2
时,他们的成员a
&amp; b
无法访问。
编译说,a
或b
不是Type
的成员。
你能告诉我我在这里做错了吗?
答案 0 :(得分:3)
resultBuffer[0].b = 10.0;
最好是在编程编辑器中编写代码而不是SO问题框。你只是增加了混乱,这至少需要result[0]->b = 10.0;
。但当然真正的问题是它根本不是通用代码。正如发布的那样,如果你把它写成模板而不是泛型,那么它只会工作,然后只能用Type2作为模板参数。这也没用。
.NET泛型要求您约束类型参数,使其始终具有b
属性,因此始终可以在运行时为任何T生成该方法。因此,您的接口必须看起来像:
interface class IType
{
property double b { double get(); void set(double); };
};
实际上只需要制定者,我认为你在实践中需要吸气剂。如何在继承接口的类中实现接口是你需要考虑的事情,我无法做出合理的猜测。