컴퓨터프로그래밍/C#

접근제한자와 this

zelkova 2016. 11. 24. 23:46

<목차로 돌아가기>


  접근제한자.



접근 제한자

설명 

public

모든 곳에서 해당 멤버로 접근이 가능합니다.

internal

같은 어셈블리에서만 public으로 접근이 가능합니다

protected internal

같은 어셈블리에서만 protected으로 접근이 가능합니다

protected

클래스 외부에서 접근할 수 없으나 파생 클래스에서는 접근이 가능합니다.

private

클래스 내부에서만 접근이 가능합니다.



접근 제한자

클래스내부

서브(파생)클래스

외부클래스

다른파일

프로젝트

public

internal

 

protected internal

 

 

protected

 

 

 

private

 

 

 

 



접근제한자 어렵게 생각할필요 없습니다.

private 내방(클래스) 침입하면 안됨! 하고 문을 닫는거랑 똑같습니다.


예를들어

private ClassA

{

   private int var1;

   int var2;

   

}


private ClassB

{

   A a = new A();

   a.var1;

   a.var2;

}


B에서 var1을 호출하면 에러가 뜹니다. 왜냐하면 접근제한(보안)을 걸어놔서 다른클래스에서 내놓으라고 요구해도 버티는 겁니다.


그리고 B에서 var2를 호출해도 에러가 뜨죠. 명시를 안하면 자동적으로 private가 설정됩니다.


위의 코드가 실행되려면 protected internal 이상으로 접근제한을 풀어줘야 정상적으로 작동됩니다.


파생클래스, 외부파일, 다른 프로젝트에 대한 개념은 다른 포스팅에서 천천히 다루겠습니다.


지금은 접근제한자가 

프로그램 보안때문에 접근제한이 있고

'보호 수준 때문에 'xxx'에 액세스할 수 없습니다.' 에러를 유발한다는 것만 알아두면 됩니다.


  this



영어해석 : 이것!

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;

  6. namespace ConsoleApplication1
  7. {
  8.     class A
  9.     { 
  10.         int num=0;

  11.         public void Show(int num)
  12.         {
  13.             Console.WriteLine("num:{0}", num);
  14.             Console.WriteLine("num:{0}", this.num);

  15.             num = num;
  16.             Console.WriteLine("num:{0}", this.num);
  17.             this.num = num;
  18.             Console.WriteLine("num:{0}", this.num);

  19.         }
  20.         static void Main(string[] args)
  21.         {
  22.             A a = new A();
  23.             a.Show(1);
  24.         }
  25.     }
  26. }


결과)


우선 값을 불러와 보았습니다.

15줄 : 여기의 num method의 변수 num입니다.

16줄 : 여기의 this.num Class a의 변수 num입니다.


값을 넣어 봤습니다.

18줄 : 여기의 num method의 변수 num입니다. 의도한 class A의 num변수를 건들이지 않고 

         메소드안에서만 돌고 있습니다. 코딩하다가 이러면 내가돌죠..?ㅋㅋㅋ(아재개그 ㅈㅅ)

19줄 : 여기의 this.num은 Class a의 변수 num입니다.

         의도한대로 Class a의 num에 변수값 1이 들어가는 것을 확인할 수 있습니다.


정리하자면 A라는 클래스에서 this를 쓰면 A클래스 를 지칭하는 것이 됩니다.

반응형

'컴퓨터프로그래밍 > C#' 카테고리의 다른 글

C# - 상속  (0) 2016.11.25
생성자와 소멸자  (0) 2016.11.25
C# - 클래스, 객체지향의 개념잡기  (0) 2016.11.24
C# - 메소드 오버로딩  (0) 2016.11.24
C#_메소드_인자(변수)전달하기  (0) 2016.11.24