簡體   English   中英

在類屬性中使用泛型類型的名稱

[英]Using the name of a generic type in a class attribute

我有一個泛型類,需要在類屬性中使用其類型參數之一的名稱。 我不知道如何在該上下文中訪問類名

我嘗試過使用typeof(TMsg).Name但VS顯示錯誤說

屬性參數必須是屬性參數類型的常量表達式,typeof表達式或數組創建表達式

目前我的代碼如下所示:

[MessageBase(typeof(TMsg).Name)]
    public abstract class DDSMessageAbstract<TMsg/*, TReader, TWriter, TMsgBase, TSupport*/> : MessageBaseForDDS
    where TMsg : new()
...

我的問題是,有沒有辦法讓我使用TMsg的實際名稱,還是我必須為每個繼承類定義這個屬性?

簡短的回答可能是你做不到。

首先,泛型是針對您的類而不是您的屬性。 所以你不能使用

MessageBase(typeof(TMsg)

attributes值僅限於簡單類型; 例如,基本常量(包括字符串)和typeof

來自ECMA 334v4:

§24.1.3屬性參數類型

屬性類的位置和命名參數的類型僅限於屬性參數類型 ,它們是:

  • 以下類型之一: boolbytechardoublefloatintlongshortstring
  • 類型object
  • 類型System.Type
  • 枚舉類型,前提是它具有公共可訪問性,並且嵌套類型(如果有)也具有公共可訪問性。
  • 上述類型的一維陣列。

ECMA-334

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM