없이 액세스 개질제 (따라서 internal
액세스)와 유형이 속성 :C#은 어셈블리의 모든 유형에 액세스 할 수있는 액세스 권한을 설정하고 평가자는 파생 된 유형으로 만 가져옵니다. 어떻게?
class SomeType {
private int length;
internal int Length {
get { return length; }
set length = value; }
}
}
는 SomeType의 어셈블리 내의 모든 유형 및 get
set
접근을 사용할 수있다. 문제 : 액세스를 set
에서 으로 제한하는 방법 SomeType (실제로 SomeType)에서 파생 된 유형입니까? protected
기발한 internal
(보다 덜 제한적인 것으로 알려져 있기
internal int Length {
get { return length; }
protected set length = value; }
}
은 컴파일러에 의해 거부된다
protected
는
internal
와
교차이 있지만, 완전히
internal
에 포함되지
인 -> 파생 유형 수 internal
의 범위를 벗어난 경우). 코드는 어셈블리 내의 모든 유형에서 액세스 할 수 있으며 어셈블리 내에서 파생 된 유형에 의해서만 설정됩니까?
편집은 : 답변을 검토 한 후, 나는 그것이 솔루션의 차이를 만들 수 있기 때문에, 재산의 또 다른 특성을 추가 할 필요가 있다고 생각 : 속성의 유형이 실제로 SomeType
입니다. 편집 된 코드는 다음과 같습니다 속성이 다음 컴파일러 오류가 발행 public
을 선언
class SomeType {
private SomeType length;
internal SomeType Length {
get { return length; }
set length = value; }
}
}
경우 (프로퍼티 타입의 SomeType이이 건물의 길이 덜 액세스 할 수 있습니다). 난 그냥 확인했습니다, 그리고 속성의 유형이 같은 경우이 경우에도 작동합니다
protected int Length
{
internal get { return length; }
set { length = value; }
}
내 생각 엔 클래스의 액세스와 속성의 액세스를 별도로 확인해야한다는 것입니다. 속성에 대한 액세스를 public으로 설정하면 get을 위해 protected를 사용할 수 있습니다. 그러나 클래스가 내부 클래스이기 때문에 SomeType에서 파생되고 이미 SomeType에 액세스 할 수있는 객체 만 (따라서 같은 어셈블리에서) 집합 접근 자에 액세스 할 수 있습니다. 하지만 그게 내게 충분히 명확하지 않다 ... – Mike
편집 된 코드를 다시 시도하십시오. 해당 속성을 아무 문제없이 공개 할 수 있고 setter를 보호 할 수 있습니다. * internal * 유형을 참조하는 * public * 유형에서는 이러한 속성을 만들 수 없습니다. –
Jon, 맞습니다. 이 시점에서 나는 초기 문제를 재현 할 수 없기 때문에 약간 혼란 스럽다. 실제로 종속성 속성에 대한 래퍼를 시작했습니다. 이 포장지에는 문제가있었습니다. 결국, 당신과 다른 사람들이 많은 제안을합니다. 그래서 이번에는 이러한 답을 긍정적으로 표시 할 것입니다. 고마워, 나는 당신의 의견을 apprciated. – Mike