使用自动属性的显式覆盖

我正在尝试使用C++/CLI自动实现的属性来明确覆盖接口。特别是,我已经写了(在C++/CLI)使用自动属性的显式覆盖

interface IInterface 

{

property Object ^MyProperty

{

Object ^get(void);

void set(Object^);

}

void Method(void);

}

要明确消费IInterface在C#中,一个会写

class MyClass : IInterface 

{

Object IInterface.MyProperty { get; set;}

void IInterface.Method()

{

}

}

C++/CLI不支持EII,但它不支持显式覆盖。例如,一个可以写

sealed ref class MyClass : IInterface 

{

private:

virtual void method(void) = IInterface::Method {}

public:

property Object ^MyProperty;

}

我想用一个自动实现的属性来定义我的显式覆盖,但

sealed ref class MyClass : IInterface 

{

private:

virtual void method(void) = IInterface::Method {}

property Object ^myProperty = IInterface::MyProperty;

}

产生编译器错误C2146:标识符ObjectC2433前失踪;virtual数据声明不允许使用C4430:缺少类型说明符,并且C3766:接口成员未实现。我错过了什么吗?什么是合适的C++/CLI语法来实现我所追求的?

回答:

我不认为你可以使用具有不同名称的基本(即:自动实现)属性来明确地实现接口属性。但是,您明确实施的属性可以引用基本属性。

interface class IInterface 

{

property Object^ Property

{

Object^ get();

void set(Object^ value);

}

};

ref class MyClass sealed : IInterface

{

public:

property String^ MyProperty;

private:

virtual property Object^ UntypedProperty

{

Object^ get() sealed = IInterface::Property::get {

return MyProperty;

}

void set(Object^ value) sealed = IInterface::Property::set {

MyProperty = value->ToString();

}

}

};

以上是 使用自动属性的显式覆盖 的全部内容, 来源链接: utcz.com/qa/261794.html

回到顶部