c# - get 和 set 函数在 C++ 程序员中很流行吗?

标签 c# c++ properties

我最初来自 C# 世界,并且正在学习 C++。我一直想知道 C++ 中的 get 和 set 函数。在 C# 中,它们的使用非常流行,像 Visual Studio 这样的工具通过使它们非常容易和快速地实现来促进使用。但是,在 C++ 世界中似乎并非如此。

这是 C# 2.0 代码:

public class Foo
{
    private string bar;

    public string Bar
    {
        get { return bar; }
        set { bar = value; }
    }
}

或者,在 C# 3.0 中:

public class Foo { get; set; }

也许人们会说,那有什么意义呢?为什么不直接创建一个公共(public)字段,然后在需要时将其设为属性;老实说,我实际上不确定。我只是出于良好的实践而这样做,因为我已经看到它这样做了很多次。

现在因为我已经习惯了,我觉得我应该把这个习惯带到我的 C++ 代码中,但这真的有必要吗?我认为它不像 C# 那样经常完成。

无论如何,这是我收集到的 C++:

class Foo
{
public:
    std::string GetBar() const; // Thanks for the tip, @Daniel Earwicker.
    void SetBar(std::string bar);
private:
    std::string bar;
}

std::string Foo::GetBar() const
{
    return bar;
}

void Foo::SetBar(std::string bar)
{
    // Also, I always wonder if using 'this->' is good practice.
    this->bar = bar;
}

现在,对我来说,这似乎是一项艰巨的工作;考虑使用 Visual Studio 的工具,C# 实现实际上需要几秒钟的时间来实现,而 C++ 花了我更长的时间来输入 - 我觉得它不值得付出努力,尤其是当替代方案是 5 行时:

class Foo
{
public:
    std::string Bar;
}

据我所知,这些是优势:

  • 您可以更改 get 和 set 函数的实现细节,因此您可以返回更有趣的内容,而不是返回私有(private)字段。
  • 您可以稍后删除 get/set 并使其仅读/写(但对于面向公众的界面,这似乎不太好)。

以及缺点:

  • 需要很长时间才能打字,这真的值得吗?通常来说,一般来说。在某些情况下,这些优势值得付出努力,但我的意思是,就“良好做法”而言,是吗?

答案:

我为什么选择the answer with less votes ?我实际上非常接近选择veefu's answer ;然而,我个人的看法(这显然是有争议的)是,这个答案过度怂恿了布丁。

另一方面,我选择的答案似乎对双方都有争议;我认为如果过度使用 getter 和 setter 邪恶的(我的意思是,当它没有必要并且会破坏业务模型时),但我们为什么不应该有一个名为 GetBalance( )?

这肯定比 PrintBalance() 更通用;如果我想以不同于类(class)希望的方式向用户展示它怎么办?现在,从某种意义上说,GetBalance() 可能不足以证明“getter 和 setter 是好的”,因为它不是(或者可能,不应该)有一个附带的 setter ,说到其中,一个名为 SetBalance(float f) 的函数可能不好(在我看来),因为它暗示该函数的实现者必须操纵帐户类的一面,这不是一件好事。

最佳答案

我认为在 C++ 中提供访问器比在 C# 中更重要。

C++ 没有对属性的内置支持。在 C# 中,您几乎可以在不更改用户代码的情况下将公共(public)字段更改为属性。在 C++ 中,这是 harder .

为了减少输入,您可以将琐碎的 setter/getter 实现为内联方法:

class Foo
{
public:
    const std::string& bar() const { return _bar; } 
    void bar(const std::string& bar) { _bar = bar; } 
private:
    std::string _bar;
};

别忘了 getters and setters are somewhat evil.

关于c# - get 和 set 函数在 C++ 程序员中很流行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737409/

相关文章:

c# - 为本地化 C# 动态添加文件

c# - JSON 数组到 Entity Framework Core 非常慢?

c# - AutoMapper ForMember 忽略不工作

C++11 基本构造函数使用 "using"关键字委托(delegate)/转发到派生类

c++ - 在互斥量上使用多个 std::unique_lock,FIFO 中的所有线程都等待进程?

ios - 当我在appdelegate中定义了一个属性时,如何使用它?

c# - 如何将 ormlite 与 SQL Server 和 Mars 一起使用?

c++ - 验证C中数组的大小

javascript - 当 async prop Promise 解析时如何更新 React 组件?

c# - 将条件传递给 Tuple<string, string, Func<bool>> 的 Func<bool>