一般我們在類中都會有關鍵字,根據物件導向的法則,這個變數最好是私有的
class
person
但是我們有時要在類的外面訪問這個變數,如果定義成私有的就無法訪問了,最開始我想既然要要訪問那就都定義成public型別就好了,把不訪問的定義成private,為什麼要有屬性這個東西?舉個例子
class
person
static main()
我們發現如果定義成public,那麼就可以隨意的訪問和修改,然而修改的資料非常的不可思議,這必然會造成錯誤,此時就需要新增條件約束。我們可以通過get,set訪問器來對資料進行處理
class person
setelse}}
}static
void main(string args)
上面的賦值超出了範圍,在set中進行修改,最後得到的是100;
屬性的定義比較麻煩,先要定義乙個私有變數,然後還要在get中return,在set中value=變數,所以有了自動屬性的誕生。
class person
public
int height
}
自動屬性為我們省去了私有變數和get,set的定義,但是功能還是一模一樣的。通過reflect我們可以發現其實是編譯器為我們定義了乙個匿名的私有字段。如果我們想要對age定義為唯讀,可以
class person
public
int height
}
有了物件初始化之後,我們就不需要考慮定義不同的建構函式來應對不同情況的初始化了,這樣就減少了我們在類中定義建構函式的**了。
class
program
; person pp = new person ;
person ppp = new person ;
}}class
person
public
string name
}
上面的**相當於這個樣子的
class program
}class person
public
string name
public
person()
public
person(int age,string name)
public
person(int age)
public
person(string name)
}
想想如果還不用自動屬性,那麼乙個簡單的類就有多長。
除了物件初始化器,還有集合初始化器。
static
void main(string args)
;}
再來乙個綜合的
class
program
, new person ,
new person };}
}class
person
public
string name
}
物件初始化器和集合初始化器
c 語言開發團隊在c 3.0中增加了乙個名為 物件初始化器 object initializer 的特性 它能初始化乙個物件中的所有允許訪問的字段和屬性。別以為這和你沒關係。我們先來看乙個你非常熟悉不過的 user operator new user operator.id 1 operator.p...
C 初始化器和建構函式初始化器
初始化器分為物件初始化器和集合初始化器。下面一一介紹。物件初始化器 物件初始化器的作用,簡單點說就是可以使我們初始化乙個類的 變得更簡潔。比如下面這個類 class person public int age public string address 我們要初始化它並對它賦值的話通常要這樣 per...
建構函式和屬性初始化
屬性值的賦值應該在類的建構函式之前還是之後執行?public class testclass 2 public testclass if testproperty 2 var testinstance new testclass 在上面的示例中,testproperty值在類的建構函式中或在類建構函...