C set和get如何用

2021-06-20 07:57:35 字數 1486 閱讀 8040

c#語言有兩個函式--乙個賦值函式(get),乙個取值函式(set),這從它生成的中間語言**可以清晰地看到。c#不提倡將域的保護級別設為public而使使用者在類外任意操作--那樣太不oo,或者具體點說太不安全!對所有有必要在類外可見的域,c#推薦採用屬性來表達。屬性不表示儲存位置,這是屬性和域的根本性的區別。下面是乙個典型的屬性設計: 

using system; 

class myclass 

set  

} } 

class test  } 

一如我們期待的那樣,程式輸出0 1。我們可以看到屬性通過對方法的包裝向程式設計師提供了乙個友好的域成員的訪問介面。這裡的value是c#的關鍵字,是我們進行屬性操作時的set的隱含引數,也就是我們在執行屬性寫操作時的右值。 

屬性提供了唯讀(get),只寫(set),讀寫(get和 set)三種介面操作。對域的這三種操作,我們必須在同乙個屬性名下宣告,而不可以將它們分離,看下面的實現: 

class myclass  } 

public string name  } 

} 上面這種分離name屬性實現的方法是錯誤的!我們應該像前面的例子一樣將他們放在一起。值得注意的是三種屬性(唯讀,只寫,讀寫)被c#認為是同乙個屬性名,看下面的例子: 

class myclass  } 

} class myclassderived: myclass  } 

} class test  } 

我們可以看到myclassderived中的屬性num-get{}遮蔽了myclass中屬性num-set{}的定義。 

當然屬性遠遠不止僅僅限於域的介面操作,屬性的本質還是方法,我們可以根據程式邏輯在屬性的提取或賦值時進行某些檢查,警告等額外操作,看下面的例子: 

class myclass 

set  } 

} 由於屬性的方法的本質,屬性當然也有方法的種種修飾。屬性也有5種訪問修飾符,但屬性的訪問修飾往往為public,否則我們也就失去了屬性作為類的公共介面的意義。除了方法的多引數帶來的方法過載等特性屬性不具備外, virtual, sealed, override, abstract等修飾符對屬性與方法同樣的行為,但由於屬性在本質上被實現為兩個方法,它的某些行為需要我們注意。看下面的例子: 

abstract class a  } 

public virtual int y 

set  

} public abstract int z  

} class b: a  } 

public override int y  } 

public override int z 

set  

} } 

這個例子集中地展示了屬性在繼承上下文中的某些典型行為。這裡,類a由於抽象屬性z的存在而必須宣告為abstract。子類b中通過base關鍵字來引用父類a的屬性。類b中可以只通過y-set便覆蓋了類a中的虛屬性。 

靜態屬性和靜態方法一樣只能訪問類的靜態域變數。我們也可以像做外部方法那樣,宣告外部屬性。

C set和get如何用

c 語言有兩個函式 乙個賦值函式 get 乙個取值函式 set 這從它生成的中間語言 可以清晰地看到。c 不提倡將域的保護級別設為public而使使用者在類外任意操作 那樣太不oo,或者具體點說太不安全!對所有有必要在類外可見的域,c 推薦採用屬性來表達。屬性不表示儲存位置,這是屬性和域的根本性的區...

C set 和get 有什麼作用

c 中get和set,看來看去還是看不懂,通俗一點解釋一下,用了有什麼好處,不用會怎麼樣 如果你這樣寫是沒有什麼不一樣的.private int old public int old set 但是如果你這樣寫就不一樣了.private int old public int old set 上面的例子...

關於C set和get的理解

有兩個類person public class person public string name public class person public string name 第乙個型別的name屬性未封裝,其name屬性直接通過public關鍵字暴露給系統中的其他類了,而第二個型別的name屬性...