1. 程式人生 > >APS.NET MVC + EF (00)---C#基礎

APS.NET MVC + EF (00)---C#基礎

turn 派生 創建 智能提示 pre 直接 添加 完全 理解

  1. 命名參數

    命名參數是把參數附上參數名稱,這樣在調用方法的時候不必按照原來的參數順序填寫參數,只需要對應好參數的名稱也能完成方法調用。

static void Main(string[] args)

{

Console.WriteLine(ShowComputer("i3 370M","2G","320G"));

Console.WriteLine(ShowComputer(disk: "320G", cpu: "i3 370M", ram: "2G"));

Console.Read();

}

private static string ShowComputer(string cpu, string ram, string disk)

{

return "My computer ... \nCpu:" + cpu + "\nRam:" + ram + "\nDisk:" + disk + "\n";

}

  1. 隱式類型

    來看看下面的代碼:

    var a=1; //int a=1;

    var b="123"; //string b="123";

    var myObj=new MyObj(); //MyObj myObj=new MyObj();

    上面的每行代碼,與後面的註釋起到的作用完全一樣。也就是說,在聲明一個變量(並且同時給它賦值)的時候,完全不用指定變量的類型,只要一個var就可以解決問題,編譯器會根據變量的值,推導出變量的類型。

    註意:必須在聲明的同時賦值。

  2. 匿名類型

    創建一個對象,一定要先定義這個對象的類型嗎?不一定,看下面的代碼

    var oddsAndEnds = new[]{

    new {Name="MVC" , Category="Pattern"},

    new {Name="Hat" , Category="Clothing"},

    new {Name="Apple" , Category="Fruit"}

    };

    StringBuilder result = new StringBuilder();

    foreach (var item in oddsAndEnds) {

    result.Append(item.Name).Append(" ");

    }

    new關鍵字之後就直接為對象定義屬性,並為這些屬性賦值。而且,對象創建出來之後,在創建對象的方法中,還可以暢通無阻的訪問對象的屬性。

    通過結合對象初始化器和類型推斷,可以創建簡單的數據存儲對象,而不需要定義相應的類或結構(匿名)。

  3. dynameic類型

    dynameic類型成為"動態類型"。我們平時定義一個int i=1是靜態類型,靜態類型就是我們在沒有編譯的時候已經明確的知道他是一個int類型,動態語言是我們在運行時才會知道的類型。在編寫動態類型的時候無法使用vs的智能提示。

class Person

{

public string Name { get; set; }

}

class Program

{

static void Main(string[] args)

{

dynamic c = new Person();

c.Name = "abc";

c.Age = 30; //編譯時不報錯,運行時報錯

Console.WriteLine(c.Name);

}

}

Dynamic類型的實例和其他類型的實例間的轉換是很簡單的,直接賦值即可。例如:

dynamic d1 = 7;

dynamic d2 = "a string";

dynamic d3 = System.DateTime.Today;

int i = d1;

string str = d2;

DateTime dt = d3;

  1. 可空類型

在程序開發中,有時候需要值類型也為可空類型,比如,在數據庫中,我們可以把一個日期Datetime設置為null。

可空類型的定義語法為: System.Nullable<類型> 變量名

例如: System.Nullable<int> num;

"?"語法就是定義Nullable<T>的一個快捷語法,上面的示例可以寫作:

int? num;

把一個值類型變量定義為對應的Nullable類型後, 這個變量就有一些其他的屬性

now.HasValue 是一個bool值,表示該變量是否非空.

now.Value 就是對應的DateTime類型值. 註意不要在now.HasValue為false的時候使用這個屬性。例如:

int? num1=null;

int num2 = num1.HasValue ? Num1 : 0 ;

也可以使用"??"運算符分配默認值,例如:

int num2 = num1 ?? 0;

  1. 擴展方法

    擴展方法使你能夠向現有類型"添加"方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。

      下面的示例為String添加判斷輸入的string是否郵箱格式的功能。

using System.Text.RegularExpressions; //正則表達式命名空間

namespace Extension_Method

{

//類必須為static的

public static class StringHelper

{

//擴展方法必須為靜態的

//擴展方法的第一個參數必須由this來修飾(第一個參數是被擴展的對象)

public static bool isEmail(this string _string)

{

return Regex.IsMatch(_string,

@"^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$");

}

}

public static void main(string[] args)

{

string str = "[email protected]";

Console.WriteLine(str.isEmail()); //調用

}

}

  1. 泛型方法

    在 C# 語言中泛型方法是指通過泛型來約束方法中的參數類型,也可以理解為對數據類型設置了參數。

    如果沒有泛型,每次方法中的參數類型都是固定的,不能隨意更改。

    在使用泛型後,方法中的數據類型則有指定的泛型來約束,即可以根據提供的泛型來傳遞不同類型的參數。

static void Main(string[] args)

{

//將T設置為double類型

Add<double>(3.3, 4);

//將T設置為int類型

Add<int>(3, 4);

}

//加法運算

private static void Add<T>(T a, T b)

{

double sum = double.Parse(a.ToString()) + double.Parse(b.ToString());

Console.WriteLine(sum);

}

APS.NET MVC + EF (00)---C#基礎