5

このようにC#でエイリアスを定義することが可能です

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

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

Microsoft もエイリアスを定義します。

        int i;
        Int32 i2;

名前空間内で使用できるエイリアスをどのように定義できますか? これは構成可能ですか?


この質問は特にエイリアスに関するものです...だから...継承をプロキシとして使用することは望ましくありません。多くの状況でそれで満足しています...しかし、説明的な名前と省略形の両方のベストが必要な場合はそうではありません.

4

2 に答える 2

5

あなたが求めていることが本当に可能だとは思いません。KeyValuePair<string, string>回避策は次のとおりです。型のコピーであり、型との間で暗黙的に変換される kvp という型を含めます。

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(...)

于 2012-06-24T12:13:04.993 に答える
4

回避策ではなく、エイリアスを明示的に要求しています。したがって、私が持っている唯一の答えは次のとおりです。これを行う方法はありません。

例として挙げたusingエイリアスはファイルごとです。C# には、クロスファイル エイリアスを許可する構造がありません。

于 2012-06-24T12:24:50.417 に答える