2017-01-26 1 views
0

클라이언트에 대한 데이터가 포함 된 ClientCapsule 클래스를 만들었습니다. 이 클래스에는 ClientInformation이라는 동일한 범위에서 만들어진 다른 클래스가 포함되어 있습니다.클래스 액세스 한정자 - 내부

나는 ClientCapsule 외부 ClientInformation 클래스의 생성을 허용하지 않으려는, 아직 내가 ClientCapsule의 구성원으로 ClientInformation 인스턴스를 허용하고 ClientCapsule 인스턴스를 생성 할 때 ClientInformation 멤버에 대한 액세스를 허용합니다.

namespace AdminServer 
{ 
    public enum ClientOperation 
    { 
     Subscribe, 
     GetTables 
    } 

    [Serializable] 
    internal class ClientInformation 
    { 

    } 

    [Serializable] 
    public class ClientCapsule 
    { 


     public readonly IPHostEntry clientMetaData; 

     public readonly ClientOperation clientRequestedOperation; 

     public readonly ClientInformation clientInfo; 
    } 
} 

을 그래서 난이 범위의면이 바깥을 향하게 할 수 없습니다 : 여기

내가 할 노력하고있어 예입니다 ClientInformation object = new ClientInformation()

을하지만 내가 할 수있을 것입니다 수행

Inconsistent accessibility field type ClientInformation is less accessible than field ClientCapsule.clientInfo

+1

'ClientInformation'은'public'이어야합니다. 원한다면'internal' 생성자로 생성 할 수 있습니다. 그렇지 않으면 어셈블리 밖에서 볼 수있는 * 클래스가 있지만 어셈블리 외부에서 볼 수없는 * 유형의 멤버도 있습니다. –

답변

3

그것은 우 :하지만 난 오류가 받고 있어요 ClientCapsule object = new ClientCapsule(),object.ClientInformation.members;

을 nds처럼 당신은 ClientInformation이 public 클래스가되어야합니다 - 단지 내부 생성자를 제공하여 다른 곳에서의 인스턴스 생성을 막을 수 있습니다.

+0

또는 공개 인터페이스가있는 내부 클래스. 공용 인터페이스 만 공개합니다. – Servy

+0

@Servy : 네, 그렇다고해도 이상하지 않을 수도있는 다른 구현을 초대합니다. 더 많은 문맥 없이는 말하기 어렵지만 너무 쉽게 엔지니어링 될 수 있습니다. –

0

공개 클래스에 public readonly ClientInformation clientInfo;이 있으므로 ClientInformation을 공개해야합니다. 내부 생성자를 갖는 것에 대해 언급 한 다른 사람 외에 인터페이스를 대신 사용할 수도 있습니다.

0

귀하의 clientinfo 접근성 public이지만, clientinfoClientInformation 형 변수이며 ClientInformation 접근성 public 없습니다.

So ClientInformation is less accessible than field ClientCapsule.clientInfo