亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

詳解C#中的屬性和屬性的使用

2020-01-24 01:18:35
字體:
來源:轉載
供稿:網友

屬性
屬性是一種成員,它提供靈活的機制來讀取、寫入或計算私有字段的值。屬性可用作公共數據成員,但它們實際上是稱為“訪問器”的特殊方法。這使得可以輕松訪問數據,還有助于提高方法的安全性和靈活性。
在此示例中,TimePeriod 類存儲時間段。該類在內部以秒為單位存儲時間,但是名為 Hours 的屬性允許客戶端以小時為單位指定時間。 Hours 屬性的訪問器執行小時與秒之間的轉換。

class TimePeriod{  private double seconds;  public double Hours  {    get { return seconds / 3600; }    set { seconds = value * 3600; }  }}class Program{  static void Main()  {    TimePeriod t = new TimePeriod();    // Assigning the Hours property causes the 'set' accessor to be called.    t.Hours = 24;    // Evaluating the Hours property causes the 'get' accessor to be called.    System.Console.WriteLine("Time in hours: " + t.Hours);  }}

輸出:

Time in hours: 24

表達式主體定義
直接只返回表達式結果的屬性很常見。下面的語法快捷方式使用 => 來定義這些屬性:

public string Name => First + " " + Last; 

屬性必須為只讀,并且你不能使用 get 訪問器關鍵字。

使用屬性
屬性結合了字段和方法的多個方面。對于對象的用戶,屬性顯示為字段,訪問該屬性需要相同的語法。對于類的實現者,屬性是一個或兩個代碼塊,表示一個 get 訪問器和/或一個 set 訪問器。當讀取屬性時,執行 get 訪問器的代碼塊;當向屬性分配一個新值時,執行 set 訪問器的代碼塊。不具有 set 訪問器的屬性被視為只讀屬性。不具有 get 訪問器的屬性被視為只寫屬性。同時具有這兩個訪問器的屬性是讀寫屬性。

屬性具有多種用法:它們可在允許更改前驗證數據;它們可透明地公開某個類上的數據,該類的數據實際上是從其他源(例如數據庫)檢索到的;當數據被更改時,它們可采取行動,例如引發事件或更改其他字段的值。
屬性在類塊中是按以下方式來聲明的:指定字段的訪問級別,接下來指定屬性的類型和名稱,然后跟上聲明 get 訪問器和/或 set 訪問器的代碼塊。例如:

public class Date{  private int month = 7; // Backing store  public int Month  {    get    {      return month;    }    set    {      if ((value > 0) && (value < 13))      {        month = value;      }    }  }}

在此示例中,Month 是作為屬性聲明的,這樣 set 訪問器可確保 Month 值設置為 1 和 12 之間。 Month 屬性使用私有字段來跟蹤該實際值。屬性的數據的真實位置經常稱為屬性的“后備存儲”。屬性使用作為后備存儲的私有字段是很常見的。將字段標記為私有可確保該字段只能通過調用屬性來更改。

。
get 訪問器
get 訪問器體與方法體相似。它必須返回屬性類型的值。執行 get 訪問器相當于讀取字段的值。例如,當正在從 get 訪問器返回私有變量并且啟用了優化時,對 get 訪問器方法的調用由編譯器進行內聯,因此不存在方法調用的系統開銷。然而,由于在編譯時編譯器不知道在運行時實際調用哪個方法,因此無法內聯虛擬 get 訪問器。以下是返回私有字段 name 的值的 get 訪問器:

class Person{  private string name; // the name field  public string Name  // the Name property  {    get    {      return name;    }  }}

當引用屬性時,除非該屬性為賦值目標,否則將調用 get 訪問器以讀取該屬性的值。例如:

Person person = new Person();//...System.Console.Write(person.Name); // the get accessor is invoked here

get 訪問器必須以 return 或 throw 語句終止,并且控制權不能離開訪問器體。
通過使用 get 訪問器更改對象的狀態不是一種好的編程風格。例如,以下訪問器在每次訪問 number 字段時都會產生更改對象狀態的副作用。

private int number;public int Number{  get  {    return number++;  // Don't do this  }}

get 訪問器可用于返回字段值,或用于計算并返回字段值。例如:

class Employee{  private string name;  public string Name  {    get    {      return name != null ? name : "NA";    }  }}

在上一個代碼段中,如果不對 Name 屬性賦值,它將返回值 NA。
set 訪問器
set 訪問器類似于返回類型為 void 的方法。它使用稱為 value 的隱式參數,此參數的類型是屬性的類型。在下面的示例中,將 set 訪問器添加到 Name 屬性:

class Person{  private string name; // the name field  public string Name  // the Name property  {    get    {      return name;    }    set    {      name = value;    }  }}

當對屬性賦值時,用提供新值的參數調用 set 訪問器。例如:

Person person = new Person();person.Name = "Joe"; // the set accessor is invoked here        System.Console.Write(person.Name); // the get accessor is invoked here

在 set 訪問器中,對局部變量聲明使用隱式參數名稱 value 是錯誤的。

此例說明了實例、靜態和只讀屬性。它從鍵盤接受雇員的姓名,按 1 遞增 NumberOfEmployees,并顯示雇員的姓名和編號。

public class Employee{  public static int NumberOfEmployees;  private static int counter;  private string name;  // A read-write instance property:  public string Name  {    get { return name; }    set { name = value; }  }  // A read-only static property:  public static int Counter  {    get { return counter; }  }  // A Constructor:  public Employee()  {    // Calculate the employee's number:    counter = ++counter + NumberOfEmployees;  }}class TestEmployee{  static void Main()  {    Employee.NumberOfEmployees = 107;    Employee e1 = new Employee();    e1.Name = "Claude Vige";    System.Console.WriteLine("Employee number: {0}", Employee.Counter);    System.Console.WriteLine("Employee name: {0}", e1.Name);  }}

輸出:

  Employee number: 108  Employee name: Claude Vige

此示例說明如何訪問基類中由派生類中具有同一名稱的另一個屬性所隱藏的屬性。

public class Employee{  private string name;  public string Name  {    get { return name; }    set { name = value; }  }}public class Manager : Employee{  private string name;  // Notice the use of the new modifier:  public new string Name  {    get { return name; }    set { name = value + ", Manager"; }  }}class TestHiding{  static void Main()  {    Manager m1 = new Manager();    // Derived class property.    m1.Name = "John";    // Base class property.    ((Employee)m1).Name = "Mary";    System.Console.WriteLine("Name in the derived class is: {0}", m1.Name);    System.Console.WriteLine("Name in the base class is: {0}", ((Employee)m1).Name);  }}

輸出:

  Name in the derived class is: John, Manager  Name in the base class is: Mary

以下是上一個示例中的要點:
派生類中的屬性 Name 隱藏基類中的屬性 Name。在這種情況下,派生類的屬性聲明中使用 new 修飾符:

public new string Name

轉換 (Employee) 用于訪問基類中的隱藏屬性:

((Employee)m1).Name = "Mary";

在此例中,Cube 和 Square 這兩個類實現抽象類 Shape,并重寫它的抽象 Area 屬性。注意屬性上 override 修飾符的使用。程序接受輸入的邊長并計算正方形和立方體的面積。它還接受輸入的面積并計算正方形和立方體的相應邊長。

abstract class Shape{  public abstract double Area  {    get;    set;  }}class Square : Shape{  public double side;  public Square(double s) //constructor  {    side = s;  }  public override double Area  {    get    {      return side * side;    }    set    {      side = System.Math.Sqrt(value);    }  }}class Cube : Shape{  public double side;  public Cube(double s)  {    side = s;  }  public override double Area  {    get    {      return 6 * side * side;    }    set    {      side = System.Math.Sqrt(value / 6);    }  }}class TestShapes{  static void Main()  {    // Input the side:    System.Console.Write("Enter the side: ");    double side = double.Parse(System.Console.ReadLine());    // Compute the areas:    Square s = new Square(side);    Cube c = new Cube(side);    // Display the results:    System.Console.WriteLine("Area of the square = {0:F2}", s.Area);    System.Console.WriteLine("Area of the cube = {0:F2}", c.Area);    System.Console.WriteLine();    // Input the area:    System.Console.Write("Enter the area: ");    double area = double.Parse(System.Console.ReadLine());    // Compute the sides:    s.Area = area;    c.Area = area;    // Display the results:    System.Console.WriteLine("Side of the square = {0:F2}", s.side);    System.Console.WriteLine("Side of the cube = {0:F2}", c.side);  }}

輸出:

  Enter the side: 4  Area of the square = 16.00  Area of the cube = 96.00  Enter the area: 24  Side of the square = 4.90  Side of the cube = 2.00

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
蜜臀久久99精品久久久无需会员| 亚洲国产精品久久精品怡红院| 日韩欧美成人精品| 91sa在线看| 亚洲精品久久久久国产| 在线观看国产精品91| 欧美诱惑福利视频| 免费97视频在线精品国自产拍| 精品久久久久久久久久| 亚洲第一精品自拍| 国产成人一区二| 国产精品88a∨| 日韩av在线免费观看一区| 欧美日韩美女在线| 日韩黄色在线免费观看| 热久久视久久精品18亚洲精品| 亚洲男人天堂2019| 一区二区三区四区视频| 日本一区二区三区在线播放| 国产精品青草久久久久福利99| 色综合天天狠天天透天天伊人| 亚洲电影成人av99爱色| 欧美肥婆姓交大片| 国产精品久久在线观看| 中文字幕亚洲无线码a| 高跟丝袜一区二区三区| 欧美黑人xxxⅹ高潮交| 一区二区三区国产在线观看| 91精品国产高清久久久久久91| 成人亚洲欧美一区二区三区| 日韩中文字幕不卡视频| 欧美日韩另类字幕中文| 国产精品吹潮在线观看| 久久最新资源网| 成人网址在线观看| 美日韩丰满少妇在线观看| 精品中文字幕在线2019| 亚洲精品一二区| 国产精品露脸自拍| 97精品国产91久久久久久| 亚洲国产成人精品一区二区| 国产成人高潮免费观看精品| 日韩福利伦理影院免费| 国产亚洲免费的视频看| 国a精品视频大全| 亚洲国产日韩一区| 欧美午夜激情小视频| 欧美做受高潮1| 国产免费一区二区三区在线观看| 色综合久综合久久综合久鬼88| 91美女片黄在线观看游戏| 高清在线视频日韩欧美| 欧美另类99xxxxx| 在线观看日韩www视频免费| 国语自产在线不卡| 欧美一级高清免费播放| 色偷偷av一区二区三区乱| 亚洲91精品在线| 国产网站欧美日韩免费精品在线观看| 欧美黄色片免费观看| 一区二区三区四区在线观看视频| 亚洲综合中文字幕在线| 日韩久久免费视频| 日日骚久久av| 欧美自拍大量在线观看| 欧美精品在线免费| 成人黄色av免费在线观看| 亚洲欧美中文日韩在线| 精品久久久久国产| 国产精品r级在线| 欧美成人高清视频| 亚洲性生活视频在线观看| 亚洲影视九九影院在线观看| 黑丝美女久久久| 亚洲精品国产suv| 亚洲综合色av| 亚洲色图五月天| 亚洲人成电影在线观看天堂色| 亚洲午夜色婷婷在线| 欧美猛交免费看| 91中文在线视频| 久久久在线免费观看| 日韩电影免费在线观看| 久久成人精品一区二区三区| 97在线日本国产| 91免费在线视频| 亚洲成色777777女色窝| 国产亚洲精品日韩| 国产精品综合网站| 日本欧美国产在线| 成人乱人伦精品视频在线观看| 日韩精品免费在线视频| 亚洲精品网址在线观看| 97视频免费看| 98精品国产高清在线xxxx天堂| 国产美女主播一区| 亚洲国产精品人人爽夜夜爽| 欧美一级黄色网| 欧美激情精品久久久久久免费印度| 亚洲精品国精品久久99热| 在线精品视频视频中文字幕| 78m国产成人精品视频| 国产精品日韩专区| 九九视频这里只有精品| 亚洲自拍偷拍一区| 午夜精品理论片| 5252色成人免费视频| 国产亚洲在线播放| 欧美日韩另类字幕中文| 91人人爽人人爽人人精88v| 欧美黑人极品猛少妇色xxxxx| 欧美日韩亚洲精品内裤| 黑人与娇小精品av专区| www.色综合| 日韩中文有码在线视频| 中文精品99久久国产香蕉| 国产精品男女猛烈高潮激情| 91免费欧美精品| 亚洲精品免费av| 国产日韩欧美中文| 亚洲欧美日韩久久久久久| 亚洲欧美色婷婷| 久久精品亚洲94久久精品| 国产精品2018| 国产精品丝袜一区二区三区| 91久久久久久国产精品| 欧美成人午夜剧场免费观看| 亚洲一区第一页| 92国产精品久久久久首页| 久久天天躁狠狠躁夜夜躁| 黄色成人av在线| 亚洲人高潮女人毛茸茸| 亚洲男人天堂网站| 欧美性xxxx极品hd欧美风情| 福利一区视频在线观看| 亚洲人成电影网| 国内精品一区二区三区| 91精品视频免费观看| 91精品在线看| 日韩一区视频在线| 国产日韩欧美一二三区| 欧美在线视频导航| 26uuu国产精品视频| 高清一区二区三区四区五区| 成人在线视频网| 91精品久久久久久久| 久久五月天综合| 性欧美亚洲xxxx乳在线观看| 欧美精品做受xxx性少妇| 国产拍精品一二三| 日本19禁啪啪免费观看www| www.亚洲免费视频| 欧美噜噜久久久xxx| 亚洲欧美另类在线观看| 欧美一级电影久久| 亚洲欧美综合精品久久成人| 亚洲一区二区久久久| 欧美久久精品午夜青青大伊人| 欧美性xxxxx极品娇小| 日韩福利在线播放| 亚洲欧洲日韩国产| 91精品国产成人www| 欧美成人在线免费| 久久国产精彩视频|