에서이 질문이 하나와 유사한 : Restrict method access to a specific class in C++생성 제한 방법/필드는 C#을
그러나, 내 질문은 C#을위한 것입니다.
다시 말해 : 두 클래스가 있습니다. 예를 들어 Foo
과 Bar
이 단단히 결합되어 있습니다. Foo
은 내가 단지 Bar
에 액세스 할 수있는 방법을 공개합니다.
나는 실제로 원하는 것을 생각하지만 실제로 어떻게 할 것인지 전혀 모르고 있거나 간단한 방법이 있는지 알고 있습니다. (new StackFrame(1)).GetMethod().DeclaringType
을 사용하여 액세스를 거부하는 일종의 특성을 사용하는 것이 포함됩니다. 내가 가서으로 업데이트 할 예정입니다 -
public class Foo {
[RestrictedUsage(Allow=typeof(Bar))]
public int SomeMethod()
{
// do something
}
}
내가 질문 (내가 여기 새로 왔어)에 대한 누락 아마 관련 세부 사항이 있습니다 사용법은 다음과 같이 보일 것입니다.
UPDATE : 내가 Foo
내가 수정하려고 행동의 기존 UIElement
감싸는 것을 언급해야한다. 수업은 봉인되어 있기 때문에 정상적으로 수정하기가 어렵습니다. Bar
은 값을 올바른 값으로 변환하는 클래스입니다. Bar
은 UI가 아니며 내 애플리케이션의 다른 위치에서 사용됩니다. Foo
값을 변환하는 방법을 알지 못합니다 (복잡합니다 - 그게 Bar
에 해당합니다). 그래서 기본 메서드를 래핑 할 수 없습니다.
Jon Skeet은 내가 기대했던 답변을 주었다. (모든 덕분에 지금까지 그에게 달려있다.)하지만 어느 대답도 적절하지 않다고 생각한다.
은 이미 잘못된 속성을 참조하는 코드에서 실수를했습니다 ...
코드를 사용하는 유일한 사람이 아니기 때문에 코드를 신뢰하지 않습니다. . Foo는 UIElement이기 때문에 자연스럽게 다른 곳에서도 참조됩니다 (별도의 어셈블리 제외). –
코드를 사용하는 유일한 사람이 아니더라도 반드시 코드를 불신 할 이유는 아닙니다. 동료가 문서화 된 "이 유형을 사용하지 마십시오"라는 경고를 정기적으로 무시합니까? 또한 Foo가 다른 곳에서 참조 되었기 때문에 Foo가 자체 어셈블리에있을 수 없다는 것을 의미하지는 않습니다 ... –
나는 수업을 중첩했다. 나는 다른 부분을 조금 재구성했고 새로운 결과는 훌륭합니다. 감사! –