C#屬性和變量的區別學習


 
昨天看三層架構 (具體沒怎么弄懂) 發現一般有一頁代碼專門用戶存放字段的 而且都用用屬性封裝..令我詫異的是 很多字段屬性都存在 get{}和set{} 和普通的變量沒什么區別(可讀可寫) 我就感覺屬性就是給字段一個多的選擇方式,有的字段是不允許更改的.. 

博客園一查,還真的漲見識了

剛寫程序時總覺得一個字段就能滿足要求,何必要使用定義起來麻煩的屬性
要get、set的去定義,代碼量還大,真不知道他們的區別和優點
例:

public class myclass 
{

   public static string A

   private sting _B=""; 
   public string Getval 
   { 
       get { retrun _B ;} 
       set { _B = value; } 
   }
}

myclass.A 和 myclass.Getval可能實現同樣功能,為什么一定要用定義屬性?

現在簡單總結下屬性較普通變量的優點:
1、數據安全
   因為A是個公有變量,在類的外部可以任意更改,為了防止因用戶任意更改,可用屬性get、set來限制_B的的只讀、只寫或控制_B的最大或最小
   引用一位老兄的簡答:"其實自定義變量已經默認實現了屬性,只是簡單的讀寫而已,我們定義的屬性要在讀寫的基礎上加上更多限制,以后你學的多了就會發現, 很多東西都是為了數據安全而加入的,說白了就是限制,例如接口,接口中的方法你必須(注意是必須,強制性的)要實現"
2、OOP和編程的一個原則就是數據封裝,意味着我們不應該將字段的類型以公開的方式提供給外界 
3、其實單純寫程序一點不難,難得是如何設計程序,使代碼簡潔易讀而效率又最高,如何保證程序的安全運行

一直沒用在form窗體 中用到這些 屬性 虛方法 抽象類 接口之類的.. 怎么在程序中使用呢... 

過兩周課設了,想辦法把學的這些都添加進去.. 把C#高級編程里面對窗體的應用也添加進去.. 會收獲很多吧 呵呵 

 

 

參考二

一個類,有時候搞不清楚到底用成員變量還是屬性。 
如: 
成員變量 
public   string   Name; 
或者用屬性 
private   string   name 
public   string   Name

        get 
        { 
                return   name; 
        } 
        set 
        { 
                name   =   value; 
        } 
}

屬性與成員變量類似,它們都提供數據存儲,但屬性的功能遠比成員變量強大。屬性由特殊方法(Get   和   Set   訪問器)訪問。Get   和   Set   訪問器允許在設置或檢索屬性之后驗證屬性值、執行其他代碼或執行其他任務

例如

成員變量這樣寫 
public   readonly   string   Name; 
那還是可以是只讀了

private   string   name 
public   string   Name

        get 
        { 
                return   name; 
        } 
        
}

面向對象的編程方法是要抽象、封裝;在類中,定義的變量是正對類本身而言,我們把它們叫做域。它可以為public   ,private等;屬性是針對外部看到的類的特性,是類展示給外部使用者的特性。前面我們講到了域可以為public,但這樣把域申明為public將 不利於類的封裝,因為外部使用者可以對類進行直接修改。所以我們就可以用到屬性,我們只是公開它們的屬性,至於如何對其進行賦值(set)如何進行取值 (get)都已經進行了封裝,對於類外部是不可見的。對於外部使用者來說只能夠使用它,不能控制它,如何控制操作是由類自身決定的。你理解了嗎?

 

參考三

C# 變量 、字段、屬性、方法的區別

 

 

string name1;//變量,可以出現在任何需要他的地方

public class MyClass  //類

{

public string name2;//字段,成員變量。是變量,只不過在MyClass這個類中,就改叫字段,也可以叫成員變量

private string name3;//私有字段,也是變量,加了private 修飾符的

 

private string name="";//配合屬性來使用

public string Name//屬性

    {

        get {return name;}//get訪問器

        set {name=value;}//set訪問器

    }

public string Name_fangfa() //方法

    {

        return name;

    }

 }

一句話:字段、屬性都是變量,只是為了區分和數據安全設置的。

字段的使用場景:與類或者對象關系密切,建議使用private修飾。

屬性的使用場景:對字段進行封裝,提供get/set關鍵字,進行訪問。

變量的使用場景:與類或者對象關系不密切,常常在方法或者語句塊中使用。

字段和屬性是相對於類而言的,而變量相對於方法或者語句塊而言,可以再任何地方使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM