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

派生自C+中的.NET抽象类+;,System::IO::TextWriter,.net,inheritance,c++-cli,abstract-class,.net,Inheritance,C++ Cli,Abstract Class,我遇到了一个问题,我正在创建一个从抽象类TextWriter派生的类 文件 来源 所以所有的源代码都是C#的,在第160-162行有一段特殊的代码,我需要重写它,以使派生类不被认为是抽象的(由编译器警告提示): 如何将这一部分翻译成C++来重写它? 警告指出“System::Text::Encoding^System::IO::TextWriter::Encoding::get(void)”是抽象的(如TextWriter的源代码所示),但同时我尝试重写此“get”函数我收到一个错误,我的类

我遇到了一个问题,我正在创建一个从抽象类TextWriter派生的类

文件

来源

所以所有的源代码都是C#的,在第160-162行有一段特殊的代码,我需要重写它,以使派生类不被认为是抽象的(由编译器警告提示):

如何将这一部分翻译成C++来重写它? 警告指出“System::Text::Encoding^System::IO::TextWriter::Encoding::get(void)”是抽象的(如TextWriter的源代码所示),但同时我尝试重写此“get”函数我收到一个错误,我的类包含显式重写“get”,但不是从包含函数声明的接口派生的

这是我曾经说过的这个函数的C++变体的唯一思想,它告诉我“获取”函数在基类中不存在:

  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 System::Text::Encoding^ Encoding {
    virtual System::Text::Encoding^ get(void) override {
        return nullptr;
    }
}

谢谢,这太完美了。我以前从未听说过C++中的属性语法,它在MSDN文章中有进一步的描述:
property System::Text::Encoding^ Encoding {
    virtual System::Text::Encoding^ get(void) override {
        return nullptr;
    }
}