C# Get Set

 

C# get set不提倡將域的保護級別設爲 public而使用戶在類外任意操做--那樣太不OO,或者具體點說太不安全!對全部有必要在類外可見的域,C#推薦採用屬性來表達。屬性不表示存儲位置,這是屬性和域的根本性的區別。下面是一個典型的屬性設計:安全

 1 using System;  
 2 class Demo 3 { 4 int integer; 5 public int Integer 6  { 7 get {return integer;} 8 set {integer=value;} 9  } 10 } 11 class Test 12 { 13 public static void Main() 14  { 15 Demo test =new Demo(); 16  Console.Write(test .Integer); 17 test .Integer++; 18  Console.Write(test .Integer); 19  } 20 } 

屬性提供了只讀(get),只寫(set),讀寫(get和 set)三種接口操做。對域的這三種操做,咱們必須在同一個屬性名下聲明,而不能夠將它們分離,看下面的實現:ide

class Demo
{  
    private string name; public string Name { get { return name; } } public string Name { set { name = value; } } } 

上面這種分離Name屬性實現的方法是錯誤的!咱們應該像前面的例子同樣將他們放在一塊兒。值得注意的是三種屬性(只讀,只寫,讀寫)被C# get set認爲是同一個屬性名,看下面的例子:spa

class Demo
{  
        protected int num=0; public int Num { set { num=value; } } } class Demo: Demo { new public int Num { get { return num; } } } class Test { public static void Main() { Demo Test = new Demo(); //Test .Num= 1; //錯誤 ! ((Demo )Test ).Num = 1; } } 

 virtual, sealed, override, abstract等修飾符對屬性與方法一樣的行爲設計

abstract class A  
{  
    int y; public virtual int X { get { return 0; } } public virtual int Y { get { return y; } set { y = value; } } public abstract int Z { get; set; } } class B: A { int z; public override int X { get { return base.X + 1; } } public override int Y { set { base.Y = value < 0? 0: value; } } public override int Z { get { return z; } set { z = value; } } } 

C# get set 詳細 講解code

相關文章
相關標籤/搜索