c#自動屬性


1.自動屬性,微軟提供的語法糖

在VS中鍵入“prop”連按兩次“Tab”,自動生成

// Auto-implemented properties for trivial get and set
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerID { get; set; }

當你聲明以下示例中所示的屬性時,編譯器將創建僅可以通過該屬性的 get 和 set 訪問器訪問的專用、匿名支持字段。

優點:減少代碼量

缺點:屬性定義時不能做其他邏輯判斷

 

2.傳統屬性的定義

鍵入“propfull”連按兩次“Tab”,自動生成,再修改變量名和屬性名

private double TotalPurchases;
public double TotalPurchases
{
    get{return TotalPurchases;}
    set{
if((1000<value)&&(value<2000))
{

TotalPurchases=value;
   }
   }
}

優點:可做邏輯判斷

缺點:繁瑣,代碼多

 

3.區別(轉自https://blog.csdn.net/fjh19950514/article/details/78303949

(1)自動實現的屬性必須同時聲明 get和 set 訪問器。創建 readonly自動實現屬性時,需要將set訪問器設置為private 。

(2)自動實現的屬性上可以使用特性,不能用在支持后備字段上。如果屬性的后備字段上使用特性,則應該只創建常規屬性。

(3)自動實現屬性get,和set中不能包含特殊的邏輯處理。與字段類似,但不同於字段。與字段不同,屬性不作為變量來分類,不能將屬性作為 ref參數或 out參數傳遞。

注意:在接口中聲明屬性而不定義主體,請使用訪問器聲明屬性,訪問器必須由實現該接口的每個類型實現。(轉自:https://www.cnblogs.com/weihengblogs/p/9228017.html

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

 

namespace 接口屬性
{
//定義接口
interface ISeries //interface接口關鍵字,ISeries接口名稱
{
 //定義接口屬性
 int next
 {
 get;
 set;
 }
}

//創建一個Numble類,實現ISeries接口
class Numble : ISeries
{
 int val;
 public Numble()
 {
 val = 0;
}

//實現屬性
public int next
{
 get
 {
 val += 2;
 return val;
}
set
{
 val = value;
}
}
}
class Program
{
 public void Run()
 {
 Numble num = new Numble();
 //訪問接口屬性
 for(int i=0;i<5;i++)
 Console.WriteLine("Next Value is "+num.next);
}
static void Main(string[] args)
{
 Program p=new Program();
 Numble num = new Numble();
 p.Run(); //這里展示了如何調用類自身的函數,先new一個Program(),然后再調用

 Console.WriteLine("Starting at 21");
 num.next = 21;
 for (int i = 0; i < 5; i++)
 Console.WriteLine("Next Value is " + num.next);

 Console.ReadLine();
 }
}
}

 

 

參考文章:

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

https://www.cnblogs.com/peterYong/p/6556712.html

https://blog.csdn.net/fjh19950514/article/details/78303949


免責聲明!

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



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