C使用自定義的泛型函式方法對泛型陣列進行四則運算

2022-02-22 01:08:41 字數 3595 閱讀 5088

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.指標有分一級指標,二級指標,指標等,有幾個 號就相當於是幾級指標 函式定義前加星號應該指的是返回值是乙個指標 即位址 加 號的是指標型別,這個概念比較複雜,你還是看書比較好 把程式 貼...