程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 2.0泛型編程基礎(2)

C# 2.0泛型編程基礎(2)

編輯:關於C語言

上面的例子不是很恰當,目的是讓初學泛型的你了解一下泛型的定義及實例化方法,如上,我們定義了一個泛型類,那麼如何實現泛型類的繼承呢?這裡需要滿足下面兩點中的任何一點即可:

1、泛型類繼承中,父類的類型參數已被實例化,這種情況下子類不一定必須是泛型類;

2、父類的類型參數沒有被實例化,但來源於子類,也就是說父類和子類都是泛型類,並且二者有相同的類型參數;

//如果這樣寫的話,顯然會報找不到類型T,S的錯誤
public class TestChild : Test<T, S> { }
//正確的寫法應該是
public class TestChild : Test<string, int>{ }
public class TestChild<T, S> : Test<T, S> { }
public class TestChild<T, S> : Test<String, int> { }

接著我們來看看泛型接口,其創建以及繼承規則和上面說的泛型類是一樣的,看下面的代碼:

public interface IList<T>
{
 T[] GetElements();
}
public interface IDictionary<K,V>
{
 void Add(K key, V value);
}
// 泛型接口的類型參數要麼已實例化
// 要麼來源於實現類聲明的類型參數
class List<T> : IList<T>, IDictionary<int, T>
{
 public T[] GetElements() { return null; }
 public void Add(int index, T value)
 {}
}

在來看一下泛型委托,首先我們定義一個類型參數為T的委托,然後在類中利用委托調用方法:

using System;
using System.Collections.Generic;
using System.Text;
namespace GenericTest
{
 //定義一個委托,類型參數為T,返回值類型T
 //泛型委托支持在返回值和參數上應用類型參數
 delegate string GenericDelete<T>(T value);
 class test
 {
  static string F(int i) { return "SHY520"; }
  static string G(string s) { return "SHY520"; }
  static void Main(string[] args)
  {
   GenericDelete<string> G1 = G;
   GenericDelete<int> G2 = new GenericDelete<int>(F);
  }
 }
}

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