1樓:陽光的雷咩咩
static void main(string args)
public static t sum(t a, t b) where t : struct
default://只是為了防止編譯錯誤}}
2樓:斯內科
static void getsum(t a)if (a is int)
console.writeline(sum);
}else if (a is double)console.writeline(sum);
}else if (a is float)console.writeline(sum);}}//使用時:
int a =;
getsum(a);
//本來是想返回t型別的 結果一直無法實現
3樓:匿名使用者
static t sum(params t arrays) where t : struct
else
throw new system.indexoutofrangeexception();}
4樓:癯月笑浮生
dynamic動態型別
c#泛型方法,泛型約束問題
5樓:匿名使用者
class templatewhere t : new() 這裡的 where t : new()不需要,
應該放在public static t createdataarray(int length) where t : new() 這裡
6樓:匿名使用者
泛型方法
在c#2.0中,方法可以定義特定於其執行範圍的泛型引數,如下所示:
public class myclass
//此方法也可不指定方法引數
public void mymethod()
}即使包含類不適用泛型引數,你也可以定義方法特定的泛型引數,如下所示:
public class myclass
//此方法也可不指定方法引數
public void mymethod()
}注意:屬性和索引器不能指定自己的泛型引數,它們只能使用所屬類中定義的泛型引數進行操作。
在呼叫泛型方法的時候,你可以提供要在呼叫場所使用的型別,如下所示:
//呼叫泛型方法
myclass myclass = new myclass();
myclass.mymethod(3);
泛型推理:在呼叫泛型方法時,c#編譯器足夠聰明,基於傳入的引數型別來推斷出正確的型別,並且它允許完全省略型別規範,如下所示:
//泛型推理機制呼叫泛型方法
myclass myclass = new myclass();
myclass.mymethod(3);
注意:泛型方法無法只根據返回值的型別推斷出型別,**如下:
public genericmethoddemo()
public class myclass
}泛型方法中泛型引數的約束,如下:
public class myclass
}您無法為類級別的泛型引數提供方法級別的約束。類級別泛型引數的所有約束都必須在類作用範圍中定義,**如下所示
public class myclass
}而下面的**是正確的
public class myclasswhere t:icomparable
}泛型引數虛方法的重寫:子類方法必須重新定義該方法特定的泛型引數,**如下
public class mybaseclass
}public class myclass :mybaseclass
}同時子類中的泛型方法不能重複基類泛型方法的約束,這一點和泛型類中的虛方法重寫是有區別的,**如下
public class mybaseclass
}public class myclass :mybaseclass
////錯誤 重寫和顯式介面實現方法的約束是從基方法繼承的,因此不能直接指定這些約束
//public override void somemethod(x x) where x:new()//}
子類方法呼叫虛擬方法的基類實現:它必須指定要代替泛型基礎方法型別所使用的型別實參。你可以自己顯式的指定它,也可以依靠型別推理(如果可能的話)**如下:
public class mybaseclass
}public class myclass :mybaseclass
}泛型委託
在某個類中定義的委託可以使用該類的泛型引數,**如下
public class myclass
}public genericmethoddemo()
委託推理:c#2.0使你可以將方法引用的直接分配轉變為委託變數。將上面的**改造如下
public class myclass
}public genericmethoddemo()
泛型委託的約束:委託級別的約束只在宣告委託變數和例項化委託時使用,類似於在型別和方法的作用範圍中實施的其他任何約束。
泛型和反射
在net2.0當中,擴充套件了反射以支援泛型引數。型別type現在可以表示帶有特定型別的實參(或繫結型別)或未指定型別的泛型(或稱未繫結型別)。
像c#1.1中那樣,您可以通過使用typeof運算子或通過呼叫每個型別支援的gettype()來獲得任何型別的type。**如下:
linkedlistlist = new linkedlist();
type type1 = typeof(linkedlist);
type type2 = list.gettype();
response.write(type1 == type2);
typeof和gettype()也可以對泛型引數進行操作,如下
public class myclass
}typeof還可以對未繫結的泛型進行操作,**如下
protected void page_load(object sender, eventargs e)
}public class myclass
}請注意"<>"的用法。要對帶有多個型別引數的未繫結泛型類進行操作,請在"<>"中使用","
type類中新增了新的方法和屬性,用於提供有關該型別的泛型方面的反射資訊,見msdn。
7樓:
public static t createdataarray(int length) where t : new()
c#泛型函式獲取t型別名稱
8樓:千鋒教育
泛型方法是使用型別引數宣告的方法,如下所示:
static void swap(ref t lhs, ref t rhs)
這裡的t是傳進來的,不需要獲取。
比如:public static t createdal()這裡的t是需要呼叫的時候確定型別的,不是反過來獲取。
9樓:匿名使用者
您好.您所需要的**如下.
public void createdal()
c關於自定義函式裡的形參加問題,C 在定義函式時,在傳遞的引數後面加上「 」是什麼意思
不知道你學沒學指標?應該還沒吧,指標就是變數在記憶體中的位址,是取位址符號,因為函式調回用答是單向的值傳遞,所以如果單存的把變數值傳給形參,那麼值傳不會主函式,就不能實現換位,這是要將變數的位址傳過去 即 a 直接對變數操作才可以實現。而比較大小時利用了return語句將值傳回就可以了。要是還不明白...
c語言程式設計圓的面積與周長自定義函式
這樣 define pi 3.1415926 include int main 注意事項 1 常量是指在運屬行過程中,其值不改變的量。2 define我們稱為巨集定義,在編譯前替換,也稱為預編譯。3 巨集定義,規範上用大寫字母表示。4 float為單精度浮點型,占用4位元組,其表示範圍為10 37到...
c語言自定義函式加星號是什麼意思
1.c語言在定義變數時加兩個星號是表明這個變數為二級指標2.c語言中在定義變數時使用 號是為了表明該變數為指標 3.指標有分一級指標,二級指標,指標等,有幾個 號就相當於是幾級指標 函式定義前加星號應該指的是返回值是乙個指標 即位址 加 號的是指標型別,這個概念比較複雜,你還是看書比較好 把程式 貼...