假设以下域实体:
public enum Role
{
User = 0,
Moderator = 1,
Administrator = 2
}
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public Role Role { get; set; }
}
我需要知道用户是否可以执行“编辑”操作。所以我有 2 个解决方案:
在用户实体中创建一个 CanEdit 方法
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public Role Role { get; set; }
public bool CanEdit()
{
return Role == Role.Moderator || Role == Role.Administrator;
}
}
为用户类型创建 CanEdit 扩展方法:
public static class UserExtensions
{
public static bool CanEdit(this User user)
{
return user.Role == Role.Moderator || user.Role == Role.Administrator;
}
}
两种解决方案都有效,但问题是何时使用标准方法与使用扩展方法?
最佳答案
扩展方法只是普通静态方法的语法糖。
如果您控制类结构,则应该在类中实现所有必要的功能。如果您不拥有要“扩展”的类,那么扩展方法真正有用/必要的地方。
对于这个例子,我认为你应该把逻辑放在 User
类中。它是用户本身的逻辑功能;消费者应该能够使用 CanEdit()
方法,而无需使用甚至不知道 UserExtensions
类。
关于c# - 标准方法与扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352535/