2017-05-06 15 views
-2

기본 클래스의 보호 된 멤버가 기본 클래스에서 상속하는 클래스에 액세스 할 수 있어야합니까?C# : 기본 클래스의 보호 된 메서드입니다. 다른 클래스의 파생 클래스 개체를 사용하여 액세스 할 수 없습니다.

나는 다른 클래스에서 파생 된 클래스의 객체를 사용하여 기본 클래스의 보호 방법에 접근하기 위해 노력하고있어,하지만 난이 오류 메시지 내가 잘못 뭐하는 거지

the base class method is inaccessible due to protection level 

을 얻을?

Program.cs

class Program 
{ 
    static void Main(string[] args) 
    { 
     DerivedClass dc = new DerivedClass(); 
     dc.DisplayValue(); 

    } 
} 

BaseClass.cs

class BaseClass 
{ 
    private int value = 3; 

    protected void DisplayValue() 
    { 
     Console.WriteLine(this.value); 
    } 
} 

DerivedClass.cs

class DerivedClass : BaseClass{} 
+0

https://docs.microsoft.com/en-us/dotnet/articles/csharp/language-reference/keywords/protected를 참조하십시오. –

답변

0

DerivedClass 내 코드는하지만, 단지를 통해, BaseClass로의 보호 된 멤버에 액세스 할 수 있습니다 DerivedClass 형식 또는 하위 형식의 식입니다.

주 기능이 파생 클래스 외부에 있으므로 예외가 발생합니다. 보호 인스턴스 부재가 선언 된 클래스의 프로그램 텍스트 외부 액세스

한 경우 : C# 5 명세의 섹션 3.5.3 (강조 내)에서

보호 내부 인스턴스 부재가 선언 의 프로그램의 프로그램 텍스트 클래스 내가 D 인 경우에 클래스에서 파생 선언 일어나야 액세스 외부 액세스 eclared. 또한 액세스는 해당 파생 클래스 유형 또는 구성된 클래스 유형의 인스턴스 을 통해 수행해야합니다.

당신은

public class Program 
    { 
     public static void Main(string[] args) 
     { 
      DerivedClass dc = new DerivedClass(); 
      dc.Display(); 
     } 
    } 
    public class BaseClass 
    { 
     private int value = 3; 

     protected void DisplayValue() 
     { 
      Console.WriteLine(this.value); 
     } 
    } 
    public class DerivedClass : BaseClass 
    { 
     public void Display() 
     { 
      DisplayValue(); 
     } 
    } 
0

보호 된 멤버가 실제로 파생 클래스에서 볼 수있는 기본 클래스의 보호 기능을 사용하는 예를 들어이 당신의 코드를 변경할 수 있습니다. 그러나 귀하의 예에서는 파생 클래스에서 DisplayValue에 액세스하지 않습니다. Program에서 액세스하면 이 아니고이 아닌 BaseClass에서 파생됩니다. 그 회원을 public으로 만들어야합니다.