계층

2009-12-31 7 views
-1

I 클래스의 설정 :
노드 (SUPER 급)
| ------ NodeType1 (클래스)
| ---------- NodeType2을 (클래스)계층

type1과 type2에 공통으로 사용되는 필드가 있습니다 (예 : NAME). SUPER 클래스 (Node)에 NAME 필드를 선언하면 유형 클래스에서 해당 변수에 어떻게 액세스해야합니까? 그 재산을 어떻게 만들 수 있습니까? 당신은 예를 들어,이 필드를 this.fieldName를 입력하면 일반적으로 필드에 대한 액세스를 얻으려면, 그 방법에 액세스 할 수 있습니다 시간

답변

2

name 필드의 access modifierpublic 또는 protected 당신이 당신의 파생 클래스에 액세스 할 수 있습니다합니다. 수정 자 public은 다른 모든 클래스에서 볼 수있게하며 protected은 파생 클래스에 대한 가시성을 제한합니다. 당신은 단지로 액세스 할 수 있습니다 경우

당신 것 현재의 클래스에서 선언 된 필드 :

this._name = "New Name"; 

당신이 속성은 다음 그에 따라 액세스 한정자의 설정을하고자하는 경우 :

public class Node 
{ 
    protected string Name { get; set; } 
} 
+0

필드가 'protected'이면 NodeType의 this.Field가 액세스합니다. 그리고 타입 I 안에는 그 필드가 속성이됩니다. – Ricardo

+0

public class Node { 보호 된 문자열 이름 {get; 세트; } } 나는 이것을 한 번 시험해 보았다. 나는 crewed해야한다. 그것은 재산이되지 못했다. – Ricardo

+0

@Ricardo - 네가 처음 질문에 대답했다. (내가 대답 한대로 대답했다.) 속성에 대한 요점은 do to fields와 같은 규칙이 속성에 적용된다고 말하는 것이 었습니다. 내가 가진 코드가 왜 작동하지 않았는지 모르겠습니다. 사용법 및 오류 메시지를 게시해야합니다. – ChrisF

3
class Node 
{ 
    public string Name { get; set; } 
} 

class NodeType1 : Node 
{ 
    void SomeMethod() 
    { 
     string nm = base.Name; 
    } 
} 

class NodeType2 : NodeType1 
{ 
    void AnotherMethod() 
    { 
     string nm = base.Name; 
    } 
} 
+1

사실, "기본"이 필요하지 않습니다. 재산 앞에서 – Rik

+0

당신은 내 질문을 이해하지 못했지만, 당신이 의미하는 바를 봅니다. 너는 도왔다. – Ricardo

+0

@Rik,이 경우가 아니라 일반적인 경우에는 기본 이름을 숨기는 동일한 이름의 속성이있을 수 있습니다. –

1

주셔서 감사합니다. 이 필드를 상속인이나 public에 표시하려면이 필드를 상속인과 수업 외부 모두에서 볼 수 있도록 protected으로 표시해야합니다.

class Node 
{ 
    protected string protectedName; 
} 

class NodeType1 : Node 
{ 
    public string Name 
    { 
     get 
     { 
      return protectedName; 
     } 
    } 
} 

class NodeType2 : NodeType1 
{ 
    protected void Foo() 
    { 
     string bar = Name; 
    } 
} 
+0

도움을 주셔서 감사합니다 – Ricardo