请考虑我的使用案例:我正在开发一个软件系统,其中有唯一标识的"项目"不同类型(用户,文件,门票等)。
我已经开始实施了,虽然我想继续实施,但我还不确定什么是"项目中最合适的唯一标识符" #34 ;.它可能是一个自动递增的整数,一个GUID,一个包含前缀+创建时间等的字符串。
显然,我的所有类都会声明唯一标识符类型的变量,如果我打算稍后更改它 - 那么它就不会很好......
我的问题是,是否存在typedef
- 值类型的.NET机制,因此我可以更改“真实”'类型和单个位置中的特定于类型的功能(例如,使用扩展方法)和不担心代码中的许多其他事件。
答案 0 :(得分:1)
不,没有。不是全球性的但是你可以创建一个基类,如:
public class BaseEntity
{
public int Id { get; set; }
}
然后从那里派生所有对象:
public class MyItem : BaseEntity
{
}
然后您只能在一个地方更改类型。
您可以为类型创建别名,但您需要在每个模块上定义它,不能全局完成:
using MyIdType = System.Int32;
别名文档为here
那就是说:我不认为改变这些事情是个好习惯......三思而行,代码一次。
答案 1 :(得分:1)
继承怎么样?
public class UniqueIdentifiedObject
{
public Guid Id { get; set; }
}
public class User : UniqueIdentifiedObject
{
// You don't need to stupidly repeat yourself (DRY)
}
如果你不能使用继承,因为你已经从知道其他类的人那里派生了这些类......那么你可以使用泛型:
public class User<TId> where TId : IEquatable<TId>
{
public TId Id { get; set; }
}
public class Employee<TId> where TId : IEquatable<TId>
{
public TId Id { get; set; }
}
这意味着您需要在课程实例化期间提供整个唯一标识符的类型:
Employee<Guid> employee = new Employee<Guid>();
我相信 generics 更接近您正在寻找的内容,因为它允许您定义一组具有Id
属性的类,但该类本身已赢得&#39 ; t知道在某些代码实例化整个类之前,正在使用什么类型的唯一标识符。显然这有一个很大的缺点:如果你想更改唯一标识符类型,你需要更改所有类实例...
无论如何,一个大规模的发现&amp;使用像(?:User|Employee|Boss|Document)<([A-Za-z0-9-_]+)>
这样的正则表达式替换或类似的东西足以改变项目中每个域类的唯一标识符的类型!)。