類在設計時,其字段成員一般被聲明為私有的,如果想讀取或設置其值,需要提供這樣的方法,而在C#中,使用屬性更充分體現了對象的封裝性,讓用戶不直接操作類的相關數據,而是通過其提供的訪問器進行訪問。
屬性可以是類、結構和接口的成員。其定義的形式為:
訪問修飾符 數據類型 標識符
{
訪問器聲明;
}
訪問修飾符可以是new,static,virtual,absctract,override和public,protected,private,internal的合法組合。
訪問器有get訪問器和set訪問器兩種,其聲明的格式如下:
get
{
return 要訪問的成員;
}
set
{
要設置值的成員 = value;
}
在使用get訪問器時要注意,其使用return要返回的值必須與屬性聲明的數據類型相同,或能夠隱式地轉換為屬性聲明的數據類型。
set訪問器的值是通過隱含的參數value帶進來的,其主據類型也必須與屬性聲明的數據類型相同或能夠進行隱式轉換。
在屬性定義中,get訪問器和set訪問器的規則如下:
(1)同時具有get訪問器和set訪問器的屬性,其值是可以讀取也可以進行修改的;
(2)只有get訪問器的屬性是只讀屬性,即這樣的屬性值僅允許讀取,而不能進行修改;
(3)只有set訪問器的屬性為只寫屬性,即該屬性的值僅能修改,而不能讀取。
下面舉一個例子,分別說明以上三種情況:
using System;
class Weather
{
private float t; //溫度
private int w; //風級
private string sun; //天氣情況
/// <summary>
/// 溫度屬性
/// </summary>
public float Temperature
{
get
{
return t;
}
set
{
if(value!=t)
t = value;
}
}
/// <summary>
/// 描述風的等級的屬性
/// </summary>
public int Windy
{
set
{
w = value;
}
}
/// <summary>
/// 描述天氣情況的屬性
/// </summary>
public string Sun
{
get
{
return sun;
}
}
/// <summary>
/// 構造器
/// </summary>
public Weather()
{
this.sun = "天氣晴朗";
}
/// <summary>
/// 帶參數的構造器
/// </summary>
/// <param name="s">描述天氣情況的字符串</param>
public Weather(string s)
{
this.sun = s;
}
/// <summary>
/// 輸出天氣信息的方法
/// </summary>
public void PrintInfo()
{
Console.WriteLine("今天:{0},風級:{1},氣溫:{2}",sun,w,t);
}
}
//定義主類進行測試
class Test
{
static void Main()
{
Weather wt = new Weather();
// wt.Sun = "天氣晴朗";//此語句將引起錯誤1
wt.Temperature = 23.4f;
wt.Windy = 4;
Console.WriteLine("氣溫:{0}",wt.Temperature); //輸出溫度信息,即可修改亦可讀取
// Console.WriteLine("風級:{0}",wt.Windy ); //雖然可以修改,但不可讀取,否則引起錯誤2
Console.WriteLine("天氣:{0}",wt.Sun); //雖然不能修改,但可以讀
wt.PrintInfo(); //使用類提供的方法,可以輸出(讀?。┤康男畔?/span>
}
}
錯誤1:無法對屬性或索引器“Weather.Sun”賦值 -- 它是只讀的
錯誤2:屬性或索引器“Weather.Windy”無法用于此上下文中,因為它缺少 get 訪問器
運行結果如下:
新聞熱點
疑難解答