人们似乎教条地坚持在田野上使用公共财产,但为什么在简单财产的情况下它如此重要?
怎么
public int Foo { get; set; }
Run Code Online (Sandbox Code Playgroud)
非常不同于
public int Foo;
Run Code Online (Sandbox Code Playgroud)
?
在我的脑海中,我可以想到两者之间的实际差异:
除了这些非常罕见的情况之外,稍后将Foo更改为计算属性会导致更改0行代码.
有什么区别:
public string varA;
Run Code Online (Sandbox Code Playgroud)
和
public string varA { get; set; }
Run Code Online (Sandbox Code Playgroud) 你能告诉我C#中属性的确切用法,我的意思是实用的解释
在我们的项目中,我们正在使用像
/// <summary>
/// column order
/// </summary>
protected int m_order;
/// <summary>
/// Get/Set column order
/// </summary>
public int Order
{
get { return m_order; }
set { m_order = value; }
}
/// <summary>
/// constructor
/// </summary>
/// <param name="name">column name</param>
/// <param name="width">column width</param>
/// <param name="order">column order</param>
public ViewColumn(string name, int width, int order)
{
//
// TODO: Add constructor logic here
//
m_name = name;
m_width = width;
m_order = order;
} …Run Code Online (Sandbox Code Playgroud) 每当有关于Properties的可信度的问题时,我发现大多数讨论都是围绕函数/方法和属性进行的.但我也想知道使用属性与相关私有字段直接与公共字段直接使用的令人信服的理由,包含最常见的获取/设置行为而没有其他处理,我的意思是这种方式
public string CustomerName;
Run Code Online (Sandbox Code Playgroud)
VS
private string customerName;
public string CustomerName
{
get{return customerName;}
set(string value){this.customerName=value;}
}
Run Code Online (Sandbox Code Playgroud) 有人可以解释一下使用Auto-Implemented Properties c#背后的想法吗?
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有动力使用私有字段的属性,因此我们可以确定如何访问私有字段.但在这里 - 就像从一开始就将这个领域定义为公开一样.没有?
将字段定义为"public const"或将其定义为具有get-only属性之间是否存在差异?
在Visual Studio 2008 Team System中,我刚刚在我的一个C#项目上运行了Code Analysis(来自Analyze菜单).产生的警告之一如下:
Microsoft.Design:因为字段"Connection._domain"在其声明类型之外是可见的,所以将其可访问性更改为private,并添加一个具有与当前字段相同的可访问性的属性,以提供对它的访问.
它指的是以下字段:
public abstract class Connection
{
protected string _domain;
}
Run Code Online (Sandbox Code Playgroud)
我不明白这个建议背后的原因.这是我认为它要我做的事情:
public abstract class Connection
{
private string _domain;
protected string Domain { get { return _domain; } set { _domain = value; } }
}
Run Code Online (Sandbox Code Playgroud)
两个问题:
为对象定义属性而不是直接访问私有变量有什么好处?
代替 :
public class A
private _x as integer = 0
Public property X() as integer
Get
return _x
End Get
Set(ByVal value As integer)
_x = value
End Set
End Property
end class
Run Code Online (Sandbox Code Playgroud)
为什么我们不能做以下事情:
public class A
public _x as integer = 0
end class
Run Code Online (Sandbox Code Playgroud)
有什么好处?
考虑以下两个选项:
public int Foo { get; set; }
public int Foo;
Run Code Online (Sandbox Code Playgroud)
它们似乎在语义上是等价的,我相信它们甚至会编译成同一个IL.那么使用该物业有什么好处?看到一个公共领域让我感到不安,但我想不出使用属性语法的任何具体优势.如果将来需要显式的getter和setter,public int Foo;则可以替换为public int Foo { ... }不需要其他更改.我能想到的最好的是属性语法感觉更好,但我很难用这个理由来说服其他人.
在这种情况下使用属性语法的优点(如果有的话)是什么?
请帮助解决这个问题.我有一个公共类,有一些属性.属性集是私有的,get是公共的.设置属性的唯一方法是调用构造函数.这种设计有什么好处或缺点?我应该知道有什么影响吗?我的论点是,如果私人套装没有任何好处,为什么呢?counter参数是在实例化类之后不需要更改属性,如果需要修改类以允许它.
这只是哲学还是背后有实际的技术推理?
public string Id
{
get;
private set;
}
Run Code Online (Sandbox Code Playgroud)
更新:只是为了澄清这个问题.我不是在问私人套装是什么以及在哪里使用它.我问您是否不知道您的属性是否需要在构造函数之外进行更改,或者您是否从限制集合中获益.所以我想问题是,如果你不知道你走哪条路,答案是否尽可能限制它?