相关疑难解决方法(0)

只写属性,有什么意义?

我理解为什么要使用以下语法来使用只读属性:

private int _MyInt;
public int MyInt
{
  get { return _MyInt; }
}
Run Code Online (Sandbox Code Playgroud)

这个例子可能不是最好的例子,因为我认为只读属性真的与readonly变量一起发光,但这不是重点.我不明白的是为什么使用以下语法使用只写属性:

private int _MyInt;
public int MyInt
{
  set { _MyInt = value; }
}
Run Code Online (Sandbox Code Playgroud)

这是各种书籍和教程中描述只读属性的方式.如果设置了变量,你会在概念上阅读一些点,至少在内部的类,但该类中甚至在内部读它,你会被accesssing这样做_MyInt,我觉得违反了封装的精神,性质试图强制执行.相反,为什么不只是使用具有不同访问修改的属性的全部功能来访问它:

private int _MyInt;
public int MyInt
{
  set { _MyInt = value; }
  private get { return _MyInt; }
}
Run Code Online (Sandbox Code Playgroud)

当然可以写出来

public int MyInt { set; private get; }
Run Code Online (Sandbox Code Playgroud)

您仍然可以获得封装,但是限制其他类访问,因此它仍然只能写入外部类.

除非有一种情况,你真诚地希望分配给一个变量,但从未实际访问它,在这种情况下,我肯定会对何时出现这种需求感到好奇.

c# properties

53
推荐指数
4
解决办法
3万
查看次数

WriteOnly属性或方法?

是否存在特定情况,即WriteOnly属性比方法更有意义?方法方法对我来说更自然.

什么是正确的方法?

使用属性:

Public WriteOnly Property MyProperty As String
   Set(ByVal value as String)
      m_myField = value
   End Set
End Property
Run Code Online (Sandbox Code Playgroud)
public string MyProperty
{
   set{ m_myField = value;}
}
Run Code Online (Sandbox Code Playgroud)

使用方法:

Public Sub SetMyProperty(ByVal value as String)
   m_myField = value
End Sub
Run Code Online (Sandbox Code Playgroud)
public void SetMyProperty(string value)
{
   m_myField = value;
}
Run Code Online (Sandbox Code Playgroud)

编辑 只是为了澄清我指的是"WriteOnly"属性.

.net coding-style

8
推荐指数
2
解决办法
8770
查看次数

是否只设置属性不好的做法?

我有一些C#代码,喜欢创建具有setter但没有getter的属性.对我而言,这似乎是一种反模式,但我错过了什么?

public List<SiteVisitSummary> DataSource {
    set {
        // crazy logic here 
    }
}
Run Code Online (Sandbox Code Playgroud)

c# anti-patterns

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

.net ×1

anti-patterns ×1

coding-style ×1

properties ×1