我需要在托管C ++项目中使用手写getter / setter来定义属性,这个类可以从C#.NET项目中使用。
主题上的codeproject article建议过时的__property float Volume;
,现在归类为/crl:oldSyntax
。
Open Standard managed extensions to C++ article表示定义property float Volume;
等属性会自动生成一个我不想要或不需要的支持字段。
简单地定义property float Volume;
之类的属性可以使用/clr
进行编译,但尝试添加float Mixer::Volume::get(){ .. }
等手写的getter / setter抛出Error C2084: function X already has a body
。
那么在没有支持字段的情况下定义只读或读/写属性以及使用自定义构建的手写getter / setter方法的正确方法是什么?
答案 0 :(得分:5)
您自己找到了仅限标题的版本。如果要在cpp文件中实现getter和setter,语法如下:
///////////////////////
// Foo.h:
///////////////////////
ref struct Foo
{
property float Volume
{
float get();
private: void set(float value);
}
private:
float m_backingField;
}
///////////////////////
// Foo.cpp:
///////////////////////
float Foo::Volume::get()
{
return m_backingField;
}
void Foo::Volume::set(float value)
{
m_backingField = value;
}
编辑:一些其他信息:
__property
关键字来自托管扩展程序,现已弃用。答案 1 :(得分:0)
我发现你必须在头文件中声明属性只有ONCE,如下所示:
property float Volume {
float get() {
return 0;
}
void set(float value) {
}
}
如果您声明属性如下,则会自动生成支持字段:
property float Volume;