程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#4.0語法糖之第一篇:自動屬性&隱式類型,

C#4.0語法糖之第一篇:自動屬性&隱式類型,

編輯:C#入門知識

C#4.0語法糖之第一篇:自動屬性&隱式類型,


今天給大家分享一下C#語法糖的簡單的兩個知識點吧。

自動屬性:在 C# 4.0 和更高版本中,當屬性的訪問器中不需要其他邏輯時,自動實現的屬性可使屬性聲明更加簡潔。 客戶端代碼還可通過這些屬性創建對象。 get and set accessors." id="mt3">如下面的示例所示聲明屬性時,編譯器將創建一個私有的匿名支持字段,該字段只能通過屬性的 get 和 set 訪問器進行訪問。

我們C#4.0以前的傳統方式的屬性是用來封裝字段的,這裡我簡單的對比一下這兩種方式的不同及關聯關系吧:

public class AutoProperty

    {

        //傳統方式定義屬性必須先定義字段來封裝

        private string name;

        public string Name

        {

            get { return name; }

            set { value = name; }

        }

        //自動屬性

        public string LoginName { get; set; }

    }

  //傳統方式 public void set_Name(string value) { value = this.name; } public string get_Name() { return this.name; }

  

//自動屬性
[CompilerGenerated]
public void set_LoginName(string value)
{
    this.<LoginName>k__BackingField = value;
}

[CompilerGenerated]
public string get_LoginName()
{
    return this.<LoginName>k__BackingField;
}

  使用自動屬性注意的地方:從上面代碼上可以看出來訪問器格式基本差不多,就是自動屬性訪問器上標記為編譯器生成,然後字段也是編譯器生成的字段。所以傳統方式和自動屬性對於編譯去來說效果是一樣的,只不過這些繁瑣的操作編譯器幫我們生成了,以減少程序員寫的代碼和讓代碼的邏輯很清晰,很簡短。

1、            對於自動實現的屬性,需要 get 和 set 訪問器。 要使該類不可變,請將 set 訪問器聲明為 private。 set accessor, you cannot use an object initializer to initialize the property." id="mt5">但是,聲明私有 set 訪問器時,不能使用對象初始值來初始化屬性。 必須使用構造函數或工廠方法。

public string CustomerId { get; private set; }
public AutoProperty(string _CustomerId)

        {

            this.CustomerId = _CustomerId;

        }

隱式類型:可 以賦予局部變量推斷“類型”var 而不是顯式類型。 var 關鍵字指示編譯器根據初始化語句右側的表達式推斷變量的類型。 推斷類型可以是內置類型、匿名類型、用戶定義類型或 .NET Framework 類庫中定義的類型,這是微軟MSDN給出的定義,其實隱式類型簡單的理解就是程序員在聲明變量可以不用指定類型,由編譯器根據值來指定類型。2、            如果需要在屬性中有復雜的業務邏輯的話還得用傳統的屬性來實現,不管什麼東西都有它的利與弊,只要我們適當的利用即可。

理論就說怎麼多,下面咱們直接帖代碼:

public static void Test()

        {

             //傳統方式定義變量

            string CustomerId = "客戶";

            var NewCustomerId = "隱式類型";

            var Age = 20;

            var Array = new string[] {"111","222"};

            object objectstring = "object";

            Console.WriteLine("傳統類型:"+CustomerId+" "+"隱式類型"+NewCustomerId);

}

從上面代碼看出來只有第一個變量是顯示定義變量,有的人看到這兒就會說這樣直接定義Object不就行了,這個有什麼好處啊,這個我剛開始也很納悶,後來我還是用反編譯工具查看了一下,在這裡我直接貼圖吧:

從上面貼圖可以看出來,隱式類型通過編譯器後會根據右側的數值自動推斷類型,但是object類型通過編譯器後還是object類型,所以這樣會出現裝箱拆箱操作,但是隱式類型沒有裝箱和拆箱操作,所以從性能上來時隱式類型是比object類型好。

使用隱式類型注意事項:

1、.必須在定義時初始化

2、一旦初始化完成,就不能再給變量賦與初始值不同類型的值了

3、var要求是局部變量

              文章原文來自:


C語言裡面,這個符號(->)是什,怎使用?

這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。
 

C語言裡面,這個符號(->)是什,怎使用?

這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved