C 類中的get 和set 函式的具體用法

2021-09-05 16:15:55 字數 1529 閱讀 8543

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 中get和set的用法

東郭西強 c 中get和set c 中get和set 在程式中經常碰到get set,不甚明白,在網上查詢時也說的迷迷糊糊,所以整理下,以學的明白透徹點。有兩個類person public class person public class person 第乙個型別的name屬性未封裝,其name屬...

C 中Get和Set的用法

首先搞清楚get和set有什麼用,在物件導向程式設計裡面,有的類的資料是私有的,是封裝起來的,所以為了讀取和寫入對應的私有資料,c 採用了關鍵字get和set,其中get負責讀取私有資料,set負責寫入私有資料,但這兩種用法應該並不絕對,我見過在get裡面進行寫入操作的。我們在學習c 語法的屬性時,...

C 中的set和get方法

在物件導向程式設計 oop 中,是不允許外界直接對類的成員變數直接訪問的,既然不能訪問,那定義這些成員變數還有什麼意義呢?所以c 中就要用set和get方法來訪問私有成員變數,它們相當於外界訪問物件的乙個通道,乙個 介面 先來看一段 class employee set public byte ag...