Вы должны отдать предпочтение Композиция над наследованием , если разные роли должны содержать разную логику, которая будет реализована с использованием полиморфизма и абстрактных методов, например:
public class User
{
public Role Role { get; set; }
}
public abstract class Role
{
abstract void DoRoleSpecificStuff();
}
public class Vendor : Role
{
public void DoRoleSpecificStuff()
{
/* ... */
}
}
public class Employer : Role
{
public void DoRoleSpecificStuff()
{
/* ... */
}
}
public class Advertiser : Role
{
public void DoRoleSpecificStuff()
{
/* ... */
}
}
Если пользователь можетиметь несколько ролей, рассмотрите возможность использования свойства коллекции Roles:
public IEnumerable<Role> Roles { get; set; }
В противном случае перечисление с использованием атрибута [Flags]
может также подойти, в зависимости от того, требуется ли вамчтобы иметь возможность назначать несколько ролей:
public class User
{
public Roles Roles { get; set; }
}
[Flags]
public enum Roles
{
Advertiser = 0x0,
Employer = 0x1,
Vendor = 0x2
}
Вы можете назначить комбинацию различных ролей следующим образом:
User user = new User
{
Roles = Roles.Advertiser | Roles.Vendor;
};
Это сделает пользователя и рекламодателем, и продавцом, ноне работодатель.