簡體   English   中英

C#typedef泛型

[英]C# typedef generics

我正在使用類的速記版本,如下所示:

using NodeSteps = Tuple<Node, int>;

Node是我自己定義的類。 這通常很好,但問題是,Node是一個需要結構的泛型。

我的問題如下:

1.如何在C#中調用這些typedef。 我知道它們並不完全是typedef,但它是我能想到的最相似的東西。

2.我如何制作通用版本?

using NodeSteps<T> = Tuple<Node<T>, int>;

我注意到這不是這樣做的方法。 我也想指定T是一個結構。

采用

class NodeSteps<T> : Tuple<Node<T>, int>
{
}

這是我所知道的typedef最接近的等價物。 如果有任何非默認構造函數,則需要聲明它們。

  1. 它們被稱為別名。

  2. 不,這是不可能的。 C#語言規范:

使用別名可以命名一個封閉的構造類型,但不能在不提供類型參數的情況下命名未綁定的泛型類型聲明。

因此, using x<T> = List<T>或類似的東西是不可能的。

您可以使用課程(請參閱其他答案)。

這將在C#語言規范的第9.4.1節中介紹。

使用別名可以命名一個封閉的構造類型,但不能在不提供類型參數的情況下命名未綁定的泛型類型聲明。

這稱為別名,不能是通用的,但使用的右手可以是通用的

using ListOfInts = List<int>

已驗證

using NodeSteps = Tuple<Node, int>;

不是typdef的等價物,而只是該類的別名 它旨在解決命名空間沖突,而無需使用整個命名空間。 我要做的是定義一個新類:

public class NodeSteps<T> : Tuple<Node<T>, int> where t: struct
{
}

這有效:

namespace Test1
{
    class Node<T>
    {
        public T Test()
        {
            return default(T);
        }
    }
}

namespace Test1
{
    using NodeSteps = System.Tuple<Node<string>, int>;

    public class Class1
    {
         public static void Main()
         {
            NodeSteps t1 = new NodeSteps(new Node<string>(), 10);

            t1.Item1.Test();
         }
    }
}

暫無
暫無

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

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