我正在尝试使用C ++ / CLI自动实现的属性来显式重写接口。我特别写过(用C ++ / CLI)
interface IInterface
{
property Object ^MyProperty
{
Object ^get(void);
void set(Object^);
}
void Method(void);
}
要在C#中显式使用
IInterface
,可以这样写: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();
}
}
};
关于c# - 使用自动属性的显式覆盖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30582955/