3
C# (모든 버전)은 속성 이름의 별칭을 향상시키는 방법을 제공합니까? AccountBase에서 사용자 이름 문자열을 사용하여 계정을 식별하지만 NonstandardAccount에서 클라이언트 (고객)가 혼동을 방지하기 위해 CustomerNumber를 사용하도록합니다.C#에서는 속성 이름의 별칭을 지정할 수 있습니까?
여기 내 코드입니다 : 나는 CUSTOMERNUMBER 속성을 추가 포기하고 그냥 사용자 이름과 동일 함을 문서화 할 수
public abstract class AccountBase
{
public string Username { get => Username; set => Username = value; }
}
public class StandardAccount
{
// The username is the ID
}
public class NonstandardAccount : AccountBase
{
// The Username or CustomerNumber is the ID
public string CustomerNumber { get => Username; set => Username = value; }
// OR ideally, but I don't think this works
public string CustomerNumber => Username;
}
, 그러나 그것은 분명하지 않다. 나는 그대로 구현을 떠날 수 있지만 명확성을 위해 여분의 스토리지가 좋은 절충안이 아닐 수도 있습니다.
'AccountBase'에 대해 개인 backerfield를 제공하지 않으면'{get; set;}'을 사용하십시오. 'StandardAccount'는 아마 당신의 설명에 따라'AccountBase'를 상속 받아야 할 것입니다. 'NonstandardAccount' 모델이 있다면'{get => Username; set => Username = value;}'하지만 세터에 부작용이있는 것은 내가 생각하기에 눈살을 찌푸리게합니다. MVC 및 WPF의 경우 특성을 사용하여 afaik의 디스플레이 (DisplayNameAttribute)에 대한 viewmodel-fields의 "rename"을 수행 할 수 있습니다. –
현재의 구현체는 여전히'NonstandardAccount'에'AccountBase'의'UserName' 속성을 노출합니다. – Odrai
@Odrai가 새로 숨기는 것은 Liskov를 위반할 것입니다. 그래서 나는 그렇게하지 않을 것입니다 ... –