1. 程式人生 > >可選參數、命名參數、.NET的特殊類型、特性

可選參數、命名參數、.NET的特殊類型、特性

應用 傳輸 問題 運行 read company ria 隱式類型 dynamic

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的特殊類型、特性