Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로퍼티
- is
- 인터페이스의 프로퍼티
- 오버라이딩
- 컬렉션 초기화
- base()
- 이것이C#이다
- 자동구현프로퍼티
- 인터페이스 예제
- c#
- this 키워드
- 일반화 클래스
- as
- 중첩클래스
- 배열
- 추상 프로퍼티
- 튜플
- 가변배열
- 클래스 연습문제
- 인덱서
- 인터페이스 상속
- 접근 한정자
- 분할 클래스
- 형식변환
- 배열초기화
- 메소드숨기기
- 프로퍼티와 생성자
- System.Array
- 무명형식
- 클래스
Archives
- Today
- Total
제로의영역
7.13 중첩 클래스 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
(1) 정의: 클래스 안에 선언되어 있는(만드는) 클래스
(2) 용도
1) 클래스 외부에 공개하고 싶지 않은 형식을 만들때
2) 현재의 클래스의 일부분처럼 표현할 수 있는 클래스를 만들 때
(3) 사용법
1) 클래스 안에 클래스를 선언함.
2) 자신이 소속되어 있는 클래스의 멤버(필드, 메소드, 프로퍼티, 이벤트 등)에 접근 가능.(private 멤버에도 접근 가능)
예제1)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Nested1
{
public class OuterClass //외부클래스
{
private int a = 70; //OuterClass의 변수를 a로 선언
public class InnerClass //내부클래스
{
OuterClass instance; //InnerClass의 변수를 OuterClass의 변수로 선언
public InnerClass(OuterClass a_instance) //외부클래스 a를 변수로 가지는 내부클래스2
{
instance = a_instance; //OuterClass의 객체를 넘겨주어 instance객체에 OuterClass의 객체인 a_instance를 가져옴
}
public void AccessVariable(int num)
{
this.instance.a = num; //num을 받아 num값을 가지고 instance객체의 멤버변수a값을 수정
}
public void ShowVariable()
{
Console.WriteLine("a:{0}", this.instance.a);
}
}
}
class Program
{
static void Main(string[] args)
{
OuterClass outer = new OuterClass(); //outer를 생성
OuterClass.InnerClass inner = new OuterClass.InnerClass(outer); //outer를 변수로 갖는 inner를 생성
inner.ShowVariable(); //inner.ShowVariable()호출 this.instance.a>>a_instance>>70
inner.AccessVariable(60); //60변수를 갖는 AccessVariable()호출 num>>60>>instance.a가 60으로 변환
inner.ShowVariable(); //변환된 값 출력
}
}
}
출력 결과:
a:70
a:60
책의 예제가 너무 어려워서 인터넷 예제를 가져왔습니다만 이것도 어렵네요. 그래서 다른 예제에 한번 더 도전해봅니다.
예제2)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Nested2
{
public class Outer_class //외부 클래스
{
public void method1() //외부 클래스 메소드
{
Console.WriteLine("Outer class method");
}
public class Inner_class //내부 클래스
{
public void method2() //내부 클래스 메소드
{
Console.WriteLine("Inner class Method");
}
}
}
class Program
{
static void Main(string[] args)
{
Outer_class obj1 = new Outer_class(); //외부클래스 변수 obj1 생성
obj1.method1(); //obj1의 메소드 호출
Outer_class.Inner_class obj2 = new Outer_class.Inner_class(); //내부클래스 변수 obj2 생성(외부클래스.내부클래스.변수로 수식)
obj2.method2(); //obj2의 메소드 호출
}
}
}
출력 결과:
Outer class method
Inner class Method
2번 예제가 딱 제 수준이네요. ㅎㅎ
중첩 클래스에서 공부 포기할 뻔했습니다.
'C#' 카테고리의 다른 글
7.15 확장 메소드 (0) | 2019.06.14 |
---|---|
7.14 분할 클래스(Partial Class) (0) | 2019.06.10 |
7.12 오버라이딩 봉인하기 (0) | 2019.06.05 |
7.11 메소드 숨기기 (0) | 2019.06.05 |
7.10 오버라이딩과 다형성 (0) | 2019.06.03 |