2010-11-24 2 views
1

C#의 공용 클래스에서 동일한 어셈블리 내의 파생 클래스에만 필드/메서드를 액세스 할 수있게 만드는 방법이 있습니까? 나는 C#에서 protected internal을 이해하는 것과동일한 어셈블리 내의 파생 클래스에만 필드/메서드를 액세스 할 수있게 만드시겠습니까?

내가 필요가 무엇 인 (파생 클래스 또는 동일한 어셈블리에서 클래스 즉, 액세스 가능) protected또는internal과 같은 것을 의미한다.

+0

[MSDN] (http://msdn.microsoft.com/ko-kr/library/system)에 따라 C#에서는이를 지원하지 않습니다. .reflection.methodbase.isfamilyandassembly.aspx) :이 가시성을 가진 _Method는 Visual Basic 또는 C#에서 정의 할 수 없습니다. –

답변

1

당신은 그것을에게 전화를 컴파일에서 외부 어셈블리에서 클래스를 방지 할 수 있지만, 당신은 당신의 protected 멤버에이 속성을 넣어 그들이 할 경우 런타임에 발생하는 예외를 강제 할 수

[System.Security.Permissions.StrongNameIdentityPermission(
    System.Security.Permissions.SecurityAction.LinkDemand, 
    PublicKey = "...<Your assembly's full public key>...")] 
1

클래스가 internal 인 경우 어셈블리 외부에서 클래스를 하위 클래스로 분류 할 수 없습니다. 필드/메소드를 protected으로 만드십시오.

클래스가 public이어야하는 경우 어셈블리 내에서 internal 하위 클래스를 사 용하십시오.

2

"내부"전용 필드/메소드를 공용 클래스에서 내부 클래스로 제거한 경우 어떻게 될까요? 그런 다음 해당 어셈블리의 모든 클래스는 내부 클래스에서 파생 될 수 있습니다.

public abstract class MyClass 
{ 
    public string Name { get; set; } 
} 

// Only classes in this assembly can derive from this class 
internal abstract class InternalClass : MyClass 
{ 
    protected string Other { get; set; } 
} 
관련 문제