gpt4 book ai didi

.net - 派生自 C++ 中的 .NET 抽象类,System::IO::TextWriter

转载 作者:行者123 更新时间:2023-12-01 11:35:30 25 4
gpt4 key购买 nike

我在创建从抽象类 TextWriter 派生的类时遇到问题。

文档 http://msdn.microsoft.com/en-us/library/System.IO.TextWriter(v=vs.110).aspx

来源 http://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs

所以所有的源代码都在 C# 中,并且在第 160-162 行有这个特定的部分,我需要覆盖它以使派生类不被视为抽象的(由编译器警告提示):

public abstract Encoding Encoding {
get;
}

我如何将这一部分翻译成 C++ 以覆盖它?

警告指出“System::Text::Encoding ^System::IO::TextWriter::Encoding::get(void)”是抽象的(如 TextWriter 的源代码所示),但同时当我尝试覆盖这个“get”函数时,我得到一个错误,我的类包含显式覆盖“get”但不是从包含函数声明的接口(interface)派生的。

这是我对这个函数的 C++ 变体的唯一想法,它告诉我基类中不存在“get”函数:

  System::Text::Encoding^ Encoding::get(void) {
return nullptr;
}

显示此问题的最基本示例:

public ref class SampleWriter : public System::IO::TextWriter {
public:

SampleWriter() {
// Do Nothing.
}

// Need to override 'System::Text::Encoding ^System::IO::TextWriter::Encoding::get(void)'...
// Remove this function to see that SampleWriter is inherently abstract and cannot be initialized
virtual System::Text::Encoding^ Encoding::get(void) override {
return nullptr;
}

protected:
~SampleWriter() {
// Do nothing.
}
};

public ref class SomeForm : public System::Windows::Forms::Form {
public:
SomeForm(void) {
InitializeComponent();
sample_writer = gcnew SampleWriter();
}

protected:
~SomeForm() {
if (components)
delete components;
}

private:
System::ComponentModel::Container^ components;
SampleWriter^ sample_writer;

void InitializeComponent(void) {
this->components = gcnew System::ComponentModel::Container();
this->Size = System::Drawing::Size(300, 300);
}
};

int main() {
SomeForm^ form = gcnew SomeForm();
form->ShowDialog();

return 0;
}

最佳答案

如果在 SampleWriter 的定义中使用 property 语法会怎样?像这样:

property System::Text::Encoding^ Encoding {
virtual System::Text::Encoding^ get(void) override {
return nullptr;
}
}

关于.net - 派生自 C++ 中的 .NET 抽象类,System::IO::TextWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27599639/

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