程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#中的屬性

C#中的屬性

編輯:關於C#

屬性是對現實世界中實體特征的抽象,它提供了對類或對象性質的訪問。比如,一個用戶的姓名、一個文件的大小、一個窗口的標題,都可以作為屬性。類的屬性所描述的是狀態的信息,在類的某個實例中屬性的值表示該對象的狀態值。

C#中的屬性更充分地體現了對象的封裝性:不直接操作類的數據內容,而是通過訪問器進行訪問。它借助於get和set對屬性的值進行讀寫,這在C++中是需要程序員手工完成的一項工作。

12.2.1 C#屬性的聲明

C#的屬性采用如下方式進行聲明:

attributes proterty-modifiers type member-name {accessor-declarations}

屬性的修飾符property-modifiers有:

●new

●public

●protected

●internal

●private

●static

●virtual

●sealed

●override

●abstract

以上修飾符中,static,virtual,override和abstract修飾符不能同時使用。

屬性的訪問聲明accessor-declaration必須用一對“{”和“}”大括號括起來,在其中給出對屬性的值進行讀寫的操作說明。

雖然屬性和域的語法比較類似,但不能把屬性當做變量那樣使用,也不能把屬性作為引用型參數或輸出參數來進行傳遞。

12.2.2 訪問屬性的值

在屬性的訪問聲明中,對屬性的值的讀操作用get關鍵字標出,對屬性的值的寫操作用set關鍵字標出。我們看下面的例子。

程序清單12-3:

using System;
public class File
{
  private string s_filename;
     public string Filename{
     get{
         return s_filename;
     }
     set{
         if(s_filename!=value){
             s_filename=value;
             }
     }
  }
}
public class Test
{
  public static void Main(){
     File f=new File();
     f.Filename="myfile.txt";
     string s=f.Filename;
  }
}

在屬性的訪問聲明中:
●只有set訪問器,表明屬性的值只能進行設置而不能讀出。
●只有get訪問器,表明屬性的值是只讀的,不能改寫。
●同時具有set訪問器和get訪問器,表明屬性的值的讀寫都是允許的。

除了使用了abstract修飾符的抽象屬性,每個訪問器的執行體中只有分號“;”,其它所有屬性的get訪問器都通過return來讀取屬性的值,set訪問器都通過value來設置屬性的值。

舉個例子,旅館對住宿人員進行登記,要記錄的信息有:客人改名、性別、所住的房間號、已住宿的天數。這裡,客人的姓名和性別一經確定就不能理更改了,用戶可以要求改變房間,住宿的天數當然也是不斷變化的。我們在類的構造函數中對客人的姓名和性別進行初始化,在四個屬性中,客人的姓名和性別是只讀的,故只具有get訪問器;房間號和住宿天數允許改變,同時具有set訪問器和get訪問器。

程序清單12-4:

using System;
public class Customer
{
 public enum sex
 {
   man,
   woman,
   };
 public string s_name;
 public string Name{
    get{
        return s_name;
     }
 }
 private sex m_sex;
 public sex Sex{
     get{
         return m_sex;
     }
 }
 private string s_no;
 public string No{
     get{
         return s_no;
     }
     set{
         if(s_no!=value){
               s_no=value;
         }
     }
 }
 private int i_day;
 public int Day{
     get{
         return i_day;
     }
     set{
         if(i_day!=value){
            i_day=value;
            }
     }
 }
 public void Customer(string name,sex sex,string no,int day)
 {
  s_name=name;
  m_sex=sex;
  s_no=no;
  i_day=day;
  }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved