第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

C#中是否有帶有參數(shù)約束的泛型構(gòu)造函數(shù)?

C#中是否有帶有參數(shù)約束的泛型構(gòu)造函數(shù)?

C#
慕尼黑8549860 2019-11-29 15:41:28
在C#中,您可以對(duì)通用方法施加約束,例如:public class A {    public static void Method<T> (T a) where T : new() {        //...do something...    }}您在其中指定的位置T應(yīng)具有不需要參數(shù)的構(gòu)造函數(shù)。我想知道是否有一種方法可以添加一個(gè)約束,例如“ 存在帶有float[,]參數(shù)的構(gòu)造函數(shù)? ”以下代碼無(wú)法編譯:public class A {    public static void Method<T> (T a) where T : new(float[,] u) {        //...do something...    }}解決方法也有用嗎?
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊

如您所知,您無(wú)法執(zhí)行此操作。


作為一種解決方法,我通常提供一個(gè)可以創(chuàng)建以下類型的對(duì)象的委托T:


public class A {


    public static void Method<T> (T a, Func<float[,], T> creator) {

        //...do something...

    }


}


查看完整回答
反對(duì) 回復(fù) 2019-11-29
?
明月笑刀無(wú)情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊

這是我個(gè)人認(rèn)為相當(dāng)有效的解決方法。如果您想到什么是通用的參數(shù)化構(gòu)造函數(shù)約束,它實(shí)際上是類型和具有特定簽名的構(gòu)造函數(shù)之間的映射。您可以使用字典來(lái)創(chuàng)建自己的映射。將它們放在靜態(tài)的“ factory”類中,您可以創(chuàng)建各種類型的對(duì)象,而不必?fù)?dān)心每次都要構(gòu)造構(gòu)造函數(shù)lambda的情況:


public static class BaseTypeFactory

{

   private delegate BaseType BaseTypeConstructor(int pParam1, int pParam2);


   private static readonly Dictionary<Type, BaseTypeConstructor>

   mTypeConstructors = new Dictionary<Type, BaseTypeConstructor>

   {

      { typeof(Object1), (pParam1, pParam2) => new Object1(pParam1, pParam2) },

      { typeof(Object2), (pParam1, pParam2) => new Object2(pParam1, pParam2) },

      { typeof(Object3), (pParam1, pParam2) => new Object3(pParam1, pParam2) }

   };

然后在您的通用方法中,例如:


   public static T BuildBaseType<T>(...)

      where T : BaseType

   {

      ...

      T myObject = (T)mTypeConstructors[typeof(T)](value1, value2);

      ...

      return myObject;

   }


查看完整回答
反對(duì) 回復(fù) 2019-11-29
  • 3 回答
  • 0 關(guān)注
  • 955 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)