簡體   English   中英

如何定義命名空間范圍的C#別名?

[英]How to define a namespace-wide C# alias?

可以像這樣在C#中定義別名

using kvp = System.Collections.Generic.KeyValuePair<string, string>;

var pair = new kvp("key", "value");

Microsoft也定義了別名:

        int i;
        Int32 i2;

我們如何定義命名空間中可用的別名? 這是可配置的嗎?


這個問題具體是關於別名......所以......不希望使用繼承作為代理。 在很多情況下我很滿意......但是當你想要最好的描述性名稱和速記版本時,我都不滿意。

我不認為你所要求的是真的可能。 這是一個解決方法:包含一個名為kvp的類型,它是KeyValuePair<string, string>的副本,並隱式轉換為您的類型。

public struct kvp
{
    public string Key { get; private set; }
    public string Value { get; private set; }

    public kvp(string key, string value)
        : this()
    {
        Key = key;
        Value = value;
    }
    public override string ToString()
    {
        return ((KeyValuePair<string, string>)this).ToString();
    }

    public static implicit operator KeyValuePair<string, string>(kvp k)
    {
        return new KeyValuePair<string, string>(k.Key, k.Value);
    }
    public static implicit operator kvp(KeyValuePair<string, string> k)
    {
        return new kvp(k.Key, k.Value);
    }
}

這樣可以使用kvp代替KeyValuePair<string, string> ,在大多數情況下不會產生意外影響。

如果你希望typedef的類型是一個未密封的類,你可以通過創建一個擴展它的類來做(非常接近)你想要的東西,所有基類的構造函數都被鏡像並擴展base(...)

您明確要求別名而不是解決方法。 因此,我唯一的答案是:沒有辦法做到這一點。

您提供的using別名是每個文件。 C#沒有允許跨文件別名的構造。

暫無
暫無

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

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