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

C#開發中的泛型學習實例(4)

編輯:關於C語言

泛型方法的重寫

abstract class Base
{
public abstract T F(T t,U u) where U : T;
public abstract T G(T t) where U : IComparable;
}
class Derived:Base
{
// 合法的重寫,約束被默認繼承
public override X F(X,Y)(X x,Y y){}
// 非法的重寫,指定任何約束都是多余的
public override T G(T t) where T : Comparable{}
}

泛型約束簡介

C#泛型要求對"所有泛型類型或泛型方法的類型參數"的任何假定,都要基於"顯式的約束",以維護C#所要求的類型安全.

"顯式約束"有where字句表達,可以指定"基類約束","接口約束","構造器約束","值類型/引用類型約束"共四中約束.

"顯示約束"並非必須,如果沒有指定"顯式約束",泛型類型參數將只能訪問System.Object類型中的公有方法.

基類約束

class A
{
public void F1(){}
}
class B
{
public void F2(){}
}
class C(S,T)
where S:A // S繼承自A
where T:B // T繼承自B
{
// 可以在類型為S的變量上調用F1
// 可以在類型為T的變量上調用F2
}

接口約束

interface IPrintable{coid Print(); }
interface IComparable{int CompareTo(T v); }
interface IKeyProvider{T HetKey(); }
class Dictionary
where K:IComparable
where V:IPrintable,IKeyProvider
{
// 可以在類型為K的變量上調用CompareTo
// 可以在類型為V的變量上調用Print和GetKey
}

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