gpt4 book ai didi

c# - 使用自动属性显式覆盖

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:38 25 4
gpt4 key购买 nike

我正在尝试使用 C++/CLI 自动实现的属性来显式覆盖接口(interface)。特别是,我编写了(用 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:接口(interface)成员未实现。我错过了什么吗?什么是合适的 C++/CLI 语法来实现我所寻求的目标?

最佳答案

我认为您不能使用具有不同名称的基本(即:自动实现)属性来显式实现接口(interface)属性。但是,您显式实现的属性可以引用基本属性。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com