Я вижу три разных способа решения этой проблемы:
Унаследованный интерфейс и затем приведение его к выбранному интерфейсу (общедоступному или частному):
interface IPublicUser {
int id {get; set;}
string publicInfo {get; set;}
}
interface ISecretUser : IPublicUser {
string secretInfo {get; set;}
}
class User : ISecretUser {
int id {get; set;}
string secretInfo {get; set;}
string publicInfo {get; set;}
}
Управление данными внутрисвойства
class User : ISecretUser {
int id {get; set;}
bool accessGranted {get; set;}
string secretInfo {
get {
if (accessGranted)
return _secretInfo;
else
return null;
}
set {
if (accessGranted)
_secretInfo = value;
}
}
string _secretInfo;
string publicInfo {get; set;}
}
Третий способ - использование двух разных моделей ViewModel, где вы можете управлять тем, что показывать пользователю ...