自動屬性和初始化器
阿新 • • 發佈:2019-01-27
屬性
一般我們在類中都會有關鍵字,根據面向物件的法則,這個變數最好是私有的
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; }
}