c# - 如何定义命名空间范围的 C# 别名?

标签 c# .net 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(...) .

关于c# - 如何定义命名空间范围的 C# 别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177039/

相关文章:

c# - 使用 Azure Web 部署时保存到 Azure 根文件夹

.net - ORM 工具或手动将对象构建到关系映射层

mysql - azure 简单表自定义 api

sql - 在 WHERE 子句中使用别名

c# - 如何在 lambda 表达式中定义为 LINQ Select 方法中的另一个函数

c# - MembershipProvider - Cookie 还是 session ?

c# - 使用带负值的计数排序? (降序排列)

C# JavaScriptSerializer 序列化接口(interface)中不存在但存在于原始对象中的字段

mysql - 引用 mySQL 查询组件

java - 如果类存在,则调用构造函数