如何为C#Auto-Property提供默认值?我要么使用构造函数,要么还原为旧语法.
使用构造函数:
class Person
{
public Person()
{
Name = "Initial Name";
}
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用普通属性语法 (使用默认值)
private string name = "Initial Name";
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
注意:这是在我开始使用C#时发布的.凭借2014年的知识,我可以真正地说,自动属性是C#语言中发生过的最好的事情.
我习惯使用私有和公共字段在C#中创建我的属性:
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
Run Code Online (Sandbox Code Playgroud)
现在,使用.NET 3.0,我们获得了自动属性:
public string Title { get; set; }
Run Code Online (Sandbox Code Playgroud)
我知道这更像是一个哲学/主观问题,但除了为每个字段保存五行代码之外,是否有任何理由使用这些自动属性?我个人的抱怨是那些属性隐藏了我的东西,我不是黑魔法的忠实粉丝.
事实上,隐藏的私有字段甚至没有显示在调试器中,这是好的,因为get/set函数什么都不做.但是当我想实际实现一些getter/setter逻辑时,我必须使用私有/公共对.
我看到了我节省大量代码(一对六行)而不会失去以后更改getter/setter逻辑的能力的好处,但是我再次通过简单地声明一个公共字段"Public string Title"就可以做到这一点需要{get; 组; 阻止,因此甚至可以节省更多代码.
那么,我在这里错过了什么?为什么有人真的想要使用自动属性?
我意识到它似乎是C#中字段和属性之间有什么区别的重复?但我的问题略有不同(从我的观点来看):
一旦我知道了
是否有任何区别(风格/未来发展除外),如设置属性时的某种控制类型?
是否有任何额外的区别:
public string MyString { get; set; }
Run Code Online (Sandbox Code Playgroud)
和
public string myString;
Run Code Online (Sandbox Code Playgroud)
(我知道,第一个版本需要C#3.0或更高版本,并且编译器会创建私有字段.)
可能重复:
C#:公共字段与自动属性重复?我认为不会:
这个问题是不一样的"为什么要使用属性,而不是公共领域".具有指定getter和setter的属性与公共字段大不相同.我的问题是,是一个没有吸气剂和二传手的财产,任何不同.
由于最近有一个空的getter和setter的能力,使用它们而不是仅仅声明一个公共成员变量有什么好处?
例:
public string MyProperty
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
与:
public string MyProperty;
Run Code Online (Sandbox Code Playgroud) 在C#中,您可以使用属性使数据字段可公开访问(允许用户直接访问它),同时保留在这些直接访问的字段上执行数据验证的功能.Java有类似的东西吗?对于Instance,假设存在一个带有以下实现的C#类(见下文):
public class newInt{
public newInt(){...}
public int x{
get{ return this.x }
set{ this.x = isValid(value) }
}
}
private static int isValid(int value){...}
Run Code Online (Sandbox Code Playgroud)
类中的这个定义允许用户在从中检索值并为其赋值时"自然地"使用数据字段'x'.以下是它将如何在主要使用.
public class Test{
public static void main(String[] args){
newInt a = new newInt();
a.x = 50;
int b = a.x;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是...... java也可以这样做吗?如果是这样,它叫什么?
为什么我们能写
public int RetInt
{
get;set;
}
Run Code Online (Sandbox Code Playgroud)
代替
public int RetInt
{
get{return someInt;}set{someInt=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属性之间是否存在差异?
我的代码和Class2的列表中有这两个类.我想组列表中的元素通过date和ID使用LINQ.
public class Class1
{
public string ID;
public int y;
public int z;
}
public class Class2
{
public List<Class1> a;
public int p, q;
public string s;
public DateTime date;
}
Run Code Online (Sandbox Code Playgroud)
我的清单与此类似:
List<Class2> object1 = new List<Class2>
{
new Class2 {p = 5, q = 6, date = DateTime.Now, a = new List<Class1> { new Class1 { ID = "3643746HDJ", y = 0, z = 9 }, new Class1 { ID = "746327846HDJ", y …Run Code Online (Sandbox Code Playgroud)