请考虑以下代码:
public class User
{
public String Id {get; set;}
}
public interface IUserService
{
bool IsAdmin(string userId);
}
我不希望在接口中指定userId
参数的类型,而是要使用一种通用类型,该类型必须与类{{ 1}},这样,如果我最终决定更改属性的类型,则不必更改代码。
所以我的想法是这样的:
Id
有可能吗?
答案 0 :(得分:1)
不,那不可能。将泛型限制为一种特定类型也不太有用,这违背了拥有泛型的目的。
您可以做的是创建自己的类型UserId
(类或结构),并在两个地方都使用它。因此,如果您的程序中用户标识符是的结构发生了变化,则可以将其更改为一个位置,并且可以在整个程序中使用。
答案 1 :(得分:0)
也许您可以使用动态属性?:
public dynamic Id { get; set; }
答案 2 :(得分:0)
当前,这是不可能的,但作为解决方法,您可以使用using alias directive,前提是两个接口都在同一文件中。
在两个接口都位于的文件中,添加一个使用别名的指令,如下所示:
using UserIdType = System.String;
现在,您可以在UserIdType
和String
中使用User
代替IUserService
。如果要更改Id
属性的类型,只需更改using别名指令,而不必更改Id
或参数userId
的类型。 / p>
但是,您是否还不必更改依赖于Id
属性的代码?与您必须进行的所有其他代码更改相比,更改一件事并没有什么大麻烦。