經典講解C get set

2021-06-10 16:55:57 字數 1441 閱讀 3788

c# get set函式很常用,但是用好還是需要很多經驗的,下面的文章就是幫你積累c# get set函式經驗的。

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

using system;  

class myclass

set

} } class test

}

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

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

class myclass  

} public string name

} }

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

class myclass  

}} class myclassderived: myclass

}} class test

}

由於屬性的方法的本質,屬性當然也有方法的種種修飾。屬性也有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函式很常用,但是用好還是需要很多經驗的,下面的文章就是幫你積累c get set函式經驗的。c get set不提倡將域的保護級別設為 public而使使用者在類外任意操作 那樣太不oo,或者具體點說太不安全!對所有有必要在類外可見的域,c 推薦採用屬性來表達。屬性不表示儲存...

object c runtime 經典講解系列二

介紹乙個技巧,最好的方式就是提出具體的需求,然後用它跟其他的解決方法做比較。implementation void mybuttonclicked id sender 這種方式的缺點也很明顯 它破壞了 的乾淨整潔。因為logging的 本身並不屬於viewcontroller裡的主要邏輯。隨著專案擴...

KMP演算法經典講解

kmp演算法的思想都是一樣的,看了很多講解,基本上都只是在next陣列的表示上是有區別的,我覺得乙個很6的大神,講的很好 這位大神的next i 表示的是如果模板串p的第i位與母串s匹配失敗,則從模板串的哪個位置開始進行下一次比較。母串s和模板串p都是從0開始到len 1,next陣列也是從0開始,...