本机 C 中的类 C# 属性?

新手上路,请多包涵

C# / .NET 中,您可以执行以下操作:

 someThing.text = "blah";
String blah = someThing.text;

但是,上面的代码实际上并没有直接与 someThing 的文本字符串交互,它使用了一个 get 和 set 属性。同样,可以使用只读属性。

有没有办法在原生 C++ 中做类似的事情? (不是 C++ .NET)

原文由 jmasterx 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 688
2 个回答

在 .NET 中,属性是真正的 getset 函数的语法糖,它们在幕后发出(实际上它们不仅仅是语法糖,因为属性是在生成的 IL 和可以与反射一起使用)。因此,在 C++ 中,您需要显式编写这些函数,因为没有属性这样的概念。

原文由 Darin Dimitrov 发布,翻译遵循 CC BY-SA 2.5 许可协议

警告:这是一个半开玩笑的回应,太可怕了!!!

是的,这是可能的:)

 template<typename T>
class Property
{
private:
    T& _value;

public:
    Property(T& value) : _value(value)
    {
    }   // eo ctor

    Property<T>& operator = (const T& val)
    {
        _value = val;
        return *this;
    };  // eo operator =

    operator const T&() const
    {
        return _value;
    };  // eo operator ()
};

然后声明你的类,为你的成员声明属性:

 class Test
{
private:
    std::string _label;
    int         _width;

public:
    Test() : Label(_label)
           , Width(_width)
    {
    };

    Property<std::string> Label;
    Property<int>         Width;
};

并调用 C# 风格!

 Test a;
a.Label = "blah";
a.Width = 5;

std::string label = a.Label;
int width = a.Width;

原文由 Moo-Juice 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题