程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 簡略進修C#中的泛型辦法應用

簡略進修C#中的泛型辦法應用

編輯:C#入門知識

簡略進修C#中的泛型辦法應用。本站提示廣大學習愛好者:(簡略進修C#中的泛型辦法應用)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略進修C#中的泛型辦法應用正文


泛型辦法是應用類型參數聲明的辦法,以下所示:

static void Swap<T>(ref T lhs, ref T rhs)
{
  T temp;
  temp = lhs;
  lhs = rhs;
  rhs = temp;
}

上面的代碼示例演示一種應用 int 作為類型參數的辦法挪用方法:

public static void TestSwap()
{
  int a = 1;
  int b = 2;

  Swap<int>(ref a, ref b);
  System.Console.WriteLine(a + " " + b);
}

也能夠省略類型參數,編譯器將揣摸出該參數。上面對 Swap 的挪用等效於後面的挪用:

Swap(ref a, ref b);

雷同的類型推理規矩也實用於靜態辦法和實例辦法。編譯器可以或許依據傳入的辦法實參揣摸類型形參;它沒法僅從束縛或前往值揣摸類型形參。是以,類型推理不實用於沒有參數的辦法。類型推理在編譯時、編譯器測驗考試解析重載辦法簽名之進步行。編譯器向同享雷同稱號的一切泛型辦法運用類型推理邏輯。在重載解析步調中,編譯器僅包含類型推理獲得勝利的那些泛型辦法。
在泛型類中,非泛型辦法可以拜訪類級別類型參數,以下所示:

class SampleClass<T>
{
  void Swap(ref T lhs, ref T rhs) { }
}

假如界說采取雷同類型參數作為包括類的泛型辦法,編譯器將生成正告 CS0693,由於在辦法規模內為外部 T 供給的參數隱蔽了為內部 T 供給的參數。假如須要應用其他類型參數(而不是實例化類時供給的類型參數)來靈巧地挪用泛型類辦法,請斟酌為辦法的類型參數供給另外一個標識符,以下面示例的 GenericList2<T> 中所示。

class GenericList<T>
{
  // CS0693
  void SampleMethod<T>() { }
}

class GenericList2<T>
{
  //No warning
  void SampleMethod<U>() { }
}

應用束縛對辦法中的類型參數啟用更專門的操作。此版本的 Swap<T> 如今名為 SwapIfGreater<T>,它只能與完成 IComparable<T> 的類型參數一路應用。

void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>
{
  T temp;
  if (lhs.CompareTo(rhs) > 0)
  {
    temp = lhs;
    lhs = rhs;
    rhs = temp;
  }
}

泛型辦法可使用很多類型參數停止重載。例如,以下辦法可以全體位於統一個類中:

void DoWork() { }
void DoWork<T>() { }
void DoWork<T, U>() { }

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