標籤:本質 建立 uid rod inf 沒有 read false 修飾符
1、選擇性參數和具名引數
1.1選擇性參數
文法:
[修飾符] 傳回型別 方法名(必選參數n,選擇性參數n)
注意:
1.必選參數可以不存在,也可以有多個;選擇性參數可以有1個或多個
2.選擇性參數必須放在必選參數之後
3.選擇性參數在定義時需要賦初始值
4.選擇性參數之間也需要使用,進行分隔
5.調用選擇性參數時,不能跨參數賦值
1.2具名引數
文法:
方法名(參數1名:參數1值,...)
優勢:
1.可以指定參數的名字來進行參數賦值
2.可以跨參數賦值
2、.NET的特殊類型
2.1隱式類型
關鍵字var:使用var聲明的變數稱為隱式類型變數
注意:
1.使用var,必須在聲明變數時同時賦值
2.隱式類型在聲明賦值之後就不能夠再給它賦予一個其他類型的值
2.2匿名型別
文法:var stu=new {Name="張三",Age=18,Gender="男"};
匿名型別的建立:通過new運算子和對象初始值來建立匿名型別,不需要定義屬性的類型,屬性類型由屬性值推斷出來
匿名型別的兩種用法:
1.使用var定義匿名型別變數
2.直接作為方法的參數值進行傳遞,典型的用途就是routes.MapRoute()方法的defalut參數
通過對象使用資料:
var stu=new {object.Name,object.Age}; 預設將所使用對象的屬性名稱作為其屬性名稱
注意:
匿名型別中屬性的賦值是一次性的,即匿名對象的屬性是唯讀
2.3dynamic類型
動態類型對象:
dynamic personl=new Student{Name="張三",Age=20};
personl.Introduce();
注意:
1.調用動態類型的成員時,並不做編譯時間檢查,而是在運行時檢查;所以調用時沒有快捷提示
dynamic類型是弱類型,可以直接賦任意類型的值
dynamic與var關鍵字的區別:
var:
1.只能用於局部變數,不能用於欄位、參數
2.聲明的同時必須初始化
3.變數的類型在編譯時間就確定了
dynamic:
1.可用於類型的欄位、方法參數、方法傳回值,可用於泛型型別參數等
2.可以賦值或被賦值任何類型,並不需要強制類型轉換
dynamic有哪些應用場合?
dynamic動態類型的用法主要有:
1.多語言混合編程,如IronRuby和IronPython
2.簡化反射的操作
3.簡化COM互操作
4.處理HTML DOM對象
2.4可空類型
文法:
System.Nullable<類型> 變數名
類型?變數名
(類型指的是實值型別)
作用:
1.可用類型允許變數包含未定義的值,多用於與資料庫的互動中
2.可空類型就是為瞭解決非空類型預設值的問題
注意:
當把一個可空類型賦給一個非空類型時,將引發編譯錯誤
以下屬性可配合可空類型解決問題:
1.DBnull.Value:表示資料庫的null值
案例:int? Age user.Age=reader["Age"]!=DBnull.Value?(int?)reader["Age"]:null;
2.HasValue:屬於bool類型,當變數包含非空值時,它被設定為true
3.Value:類型與其對應的實值型別相同,如何HasValue為true,則說明Value包含有意義的值。如果HasValue為false,則訪問Value將引發InvalidOperaionException異常
使用"??"運算子分配預設值:
int? num=null;
int num2=num??0;
"??"運算子會首先判斷左運算元是否為null,如果為null則返回"??"右面給出的預設值,否則返回左運算元
3、特性
文法:[特性名] 或[特姓名(參數值...)]
C#中的特性主要的特點:
1.為目標元素(可以是程式集、類、屬性、方法等)加入附加資訊,類似於注釋
2.特性本質上也是一個類,直接或間接地繼承自Attribute類
注意:
1.特性命名都以Attribute結尾,使用時可以省略,.NET會自動找到對應的屬性類別
2.同一目標元素可以使用多個
3.特性名必須放在[]之間,()之間的參數由屬性類別的建構函式確定
1.特性用於方法
ObsoleteAttribute:它用於標記一個不再使用的程式元素
[Obsolete("不要使用舊的方法,請使用新的方法",false)]
第1個參數是string類型的文字說明,解釋。
第2個參數是告訴編譯器是否把使用這個方法視為一種錯誤,如果值為true,編譯時間會提示錯誤;如果為false,程式不會報錯,但編譯器會產生一個警告
Obsolete特性就是ObsoleteAttribute類,繼承自 Attribute類,它包含建構函式,也包含屬性成員,根據Obsolete特性的定義,在使用它時可以有多種文法形式:
[Obsolete]和[Obsolete("不要使用舊的方法,請使用新的方法",false)]
[Obsolete]和[Obsolete()]是等價的
2.特性應用到類上:
[Serializable]:表示支援序列化
序列化,主要是將對象的狀態資訊轉換為可以儲存或傳輸的形式
3.特性應用到程式集上
在所有.NET項目中都包含應用到程式集上的特性,它們出現在所有的項目中的"Properties\AssemblyInfo.cs"檔案夾中
AssemblyTitle:表示程式集的標題
AssemblyDescription:用來描述程式集資訊
AssemblyCompany:用來定義公司
AssemblyProduct:用來定義產品
AssemblyCopyright:用來聲明版本
GuidL:用來定義程式集唯一的編號
AssemblyVersion:定義程式集的版本
是不是一個目標元素(類、屬性)只能有一個特性?
不一定,C#中的目標元素可以有多個特性
選擇性參數、具名引數、.NET的特殊類型、特性