相关疑难解决方法(0)

为什么要使用getter和setter/accessors?

使用getter和setter的优点是什么 - 只能获取和设置 - 而不是简单地使用公共字段来存储这些变量?

如果getter和setter做的不仅仅是简单的get/set,我可以非常快地解决这个问题,但我并不是100%清楚如何:

public String foo;
Run Code Online (Sandbox Code Playgroud)

更糟糕的是:

private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
Run Code Online (Sandbox Code Playgroud)

而前者需要很少的样板代码.

java oop getter setter abstraction

1472
推荐指数
26
解决办法
37万
查看次数

只读字段与只读属性

有时我看到用readonly成员定义的类是这样的:

class Foo
{
    private readonly string bar;

    public Foo(string bar)
    {
        this.bar = bar;
    }

    public string Bar => bar;
}
Run Code Online (Sandbox Code Playgroud)

有时我看到用readonly成员定义的类是这样的:

class Foo
{
    public Foo(string bar)
    {
        Bar = bar;
    }

    public string Bar { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

第二个例子看起来更具可读性/简洁性,但我想知道是否有任何合理的理由明确定义readonly支持字段(根据第一个例子)?

有关这两个例子的深入分析,请在CLR中理想地涵盖真正发生的事情.

c#

5
推荐指数
1
解决办法
1511
查看次数

有时 Visual Studio IDE0032 推荐是错误的应用吗?

Visual Studio 2019给出了以下关于 private 的建议_myNum:改为使用auto-property。起初我很想这样做,摆脱这个private变量并拥有带有private set. 但这并没有提供相同的功能:我想要一个公共属性来公开这条给定的信息,并且只在一个可以设置这条数据的地方 - 构造函数,因此是关键字readonly

换句话说,我是对的吗?这个建议并不总是正确的?

public class Foo
{
    public int MyNum { get { return _myNum; } }
    private readonly int _myNum;
    public Foo(int num)
    {
        _myNum = num;
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

应用自动完成建议,代码如下所示:

public int MyNum { get; }

public Foo(int num)
{
    MyNum = num;
}
Run Code Online (Sandbox Code Playgroud)

c# refactoring code-analysis visual-studio roslyn-code-analysis

3
推荐指数
1
解决办法
329
查看次数