使用自动属性的显式覆盖
我正在尝试使用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:标识符Object,C2433前失踪;: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


