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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++ 模板與具有各種參數(shù)的 C# 泛型方法

C++ 模板與具有各種參數(shù)的 C# 泛型方法

C#
函數(shù)式編程 2022-06-18 16:29:33
在 C++ 中,這是有效的。template<class T> void func(T t){ t.method(); }如何在 C# 中實現(xiàn)這一點?這是我嘗試過的,但它不起作用。void func<T>(T t){ t.method(); }或者在 C# 中不可能做到這一點?
查看完整描述

3 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

以下應該工作


public static class MyClass

{

  public static void MyMethod<T>(T t) where T : class

  {

     t.ToString(); // Note: for this to work we need to KNOW the type which defines `method`.

  }

}

還有這個:


public class MyBase

{

   void Method();

}


public static class MyClassForBase

{

  public static void MyMethod<T>(T t) where T : MyBase

  {

     t.Method(); // Note: anything from MyBase is now available

  }

}

最后但并非最不重要的一點是,您可以像這樣使用后期綁定


public static class MyClassDynamic

{

  public static void MyMethod(dynamic t)

  {

     t.Method(); // Note: if t doesn't have a `Method` defined, the code will crush-n-burn at runtime

  }

}


查看完整回答
反對 回復 2022-06-18
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

在采用泛型參數(shù)的方法中,您只能在該參數(shù)上調用編譯器知道將存在的方法。


在您的示例中:


void func<T>(T t)

{

    t.method();

}

編譯器不知道該方法method存在,所以這不起作用。


您可以通過使用約束來告訴編譯器哪些方法可用。例如,如果該方法是在接口上定義的,那么您可以使用where如下子句正確約束它:


pubic interface IClassWithMethod

{

    void method();

}


void func<T>(T t) where T : IClassWithMethod

{

    t.method();

}


查看完整回答
反對 回復 2022-06-18
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

C# 中的泛型與 C++ 中的模板不同。C++ 模板本質上是在編譯時應用于代碼的宏,具體取決于它們所使用的類型。所以如果你試圖在一個沒有.method()方法的類上使用你的模板,它會在編譯時失敗。


相反,C# 泛型要求任何類型T 都必須定義泛型方法使用的任何方法和屬性。因此,如果您有一個定義.method()方法的基本類型或接口,您可以將泛型方法限制為該類型:


void func<T>(T t) where T:IHaveMethod

{ t.method(); }

只要IHaveMethod接口定義了method(),泛型函數(shù)就會編譯。請注意,在您的具體示例中,通用方法是無用的,因為您可以只調用method接口類型。


當您希望返回類型基于輸入類型時,泛型更有用:


T func<T>(T t) where T:IHaveMethod

{ t.method(); return t;}

現(xiàn)在,不僅method被調用,而且返回類型正是泛型參數(shù)的類型,而不僅僅是 an IHaveMethod,這可能會限制您可以在不強制轉換的情況下使用 return 執(zhí)行的操作。


最重要的是,不要像看待 C++ 模板那樣看待泛型。有一些非常根本的差異會讓您更難看出何時何地可以/應該使用泛型。


查看完整回答
反對 回復 2022-06-18
  • 3 回答
  • 0 關注
  • 145 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號