我正在寻找将语法糖添加到项目中的方法,并且正在考虑添加一个Alias
类,这有点让人联想到typedef
C++,但存在显着差异。它的目的是提供一种为复杂类型名轻松创建缩短别名的方法,并允许方法重载具有更大的灵活性。它看起来像这样:
班上
public class Alias<T>
{
private T Data { get; set; }
public static implicit operator T(Alias<T> rhs)
{
return rhs.Data;
}
public static implicit operator Alias<T>(T rhs)
{
return new Alias<T> { Data = rhs };
}
// Dereferencing operator
public static T operator ~(Alias<T> rhs)
{
return rhs.Data;
}
}
用例 1:缩短复杂类型名称
// Declare alias somewhere for a cumbersome type,
// like a dictionary of dictionaries
class UserFields : Alias<Dictionary<string, string>> {}
class UserInfos : Alias<Dictionary<int, UserFields>> {}
// Now use it
UserFields fields = new UserFields();
UserInfos infos = new UserInfos();
(~infos)[0] = fields;
用例 2:方法重载
// Declare some aliases
class UserId : Alias<Int64> {}
class ProductId : Alias<Int64> {}
// Now we can distinguish between them, though they
// are both Int64's
public void DoSomething(UserId userId) { ... }
public void DoSomething(ProductId productId) { ... }
这些例子是人为的,但希望能说明我的意图。恐怕这最终可能会变得很糟糕,并带来意想不到的后果。使用
Alias
所描述的类有哪些陷阱和问题?