标签:
一般我们在类中都会有关键字,根据面向对象的法则,这个变量最好是私有的
class Person
{
private int Age;
}
但是我们有时要在类的外面访问这个变量,如果定义成私有的就无法访问了,最开始我想既然要要访问那就都定义成public类型就好了,把不访问的定义成private,为什么要有属性这个东西?举个例子
class Person
{
public int age;
}
static main()
{
Person p = new Person();
p.age = 1000;//年龄1000岁
}
我们发现如果定义成public,那么就可以随意的访问和修改,然而修改的数据非常的不可思议,这必然会造成错误,此时就需要添加条件约束。我们可以通过get,set访问器来对数据进行处理
class Person
{
private int age;//单位cm
public int Age
{
get
{
return Age;
}
set
{
if(Age < 100)
{
Age = value;
}
else
{
Age = 100;
}
}
}
}
static void Main(string[] args)
{
Person p = new Person();
p.Age = 1000;//1000岁
Console.Write(p.Age);
}
上面的赋值超出了范围,在set中进行修改,最后得到的是100;
属性的定义比较麻烦,先要定义一个私有变量,然后还要在get中return,在set中value=变量,所以有了自动属性的诞生。
Class Person
{
public int Age{get;set;}
public int Height{get;set;}
}
自动属性为我们省去了私有变量和get,set的定义,但是功能还是一模一样的。通过reflect我们可以发现其实是编译器为我们定义了一个匿名的私有字段。如果我们想要对Age定义为只读,可以
Class Person
{
public int Age{get;private set;}
public int Height{get;set;}
}
有了对象初始化之后,我们就不需要考虑定义不同的构造函数来应对不同情况的初始化了,这样就减少了我们在类中定义构造函数的代码了。
class Program
{
static void Main(string[] args)
{
Person p = new Person { Age = 10, Name = "tian" };
Person pp = new Person { Age = 10 };
Person ppp = new Person {Name = "tian"};
}
}
class Person
{
public int Age { get; set; }
public string Name { get; set; }
}
上面的代码相当于这个样子的
class Program
{
static void Main(string[] args)
{
Person p = new Person(10, "tian");
Person pp = new Person(10);
Person ppp = new Person("tian");
}
}
class Person
{
public int Age { get; set; }
public string Name { get; set; }
public Person() { }
public Person(int age,string name)
{
Age = age;
Name = name;
}
public Person(int age)
{
Age = age;
}
public Person(string name)
{
Name = name;
}
}
想想如果还不用自动属性,那么一个简单的类就有多长。
除了对象初始化器,还有集合初始化器。
static void Main(string[] args)
{
//一般集合初始化
List<string> p = new List<string>();
p.Add("p");
p.Add("pp");
p.Add("ppp");
//集合初始化器
List<string> newp = new List<string>
{
"p","pp","ppp"
};
}
再来一个综合的
class Program
{
static void Main(string[] args)
{
var newp = new List<Person>
{
new Person {Age = 10,Name="tian" },
new Person { Age = 10},
new Person { Name = "tian"}
};
}
}
class Person
{
public int Age { get; set; }
public string Name { get; set; }
}
标签:
原文地址:http://blog.csdn.net/he_wen_jie/article/details/51345185