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
- System.Array
- is
- 이것이C#이다
- 클래스 연습문제
- 튜플
- 자동구현프로퍼티
- 무명형식
- 인터페이스 예제
- 배열초기화
- 분할 클래스
- 오버라이딩
- this 키워드
- 인터페이스의 프로퍼티
- 일반화 클래스
- as
- 인터페이스 상속
- 접근 한정자
- 인덱서
- 클래스
- 가변배열
- 메소드숨기기
- 형식변환
- 컬렉션 초기화
- c#
- 중첩클래스
- 프로퍼티
- 추상 프로퍼티
- 프로퍼티와 생성자
- 배열
- base()
Archives
- Today
- Total
제로의영역
7.6.2 this() 생성자 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
(1) 정의: 자기자신의 생성자를 가리키는 역할 >> this는 클래스 안에서 선언된 변수나 메소드를 가리킴.
(2) 용도: 생성자를 오버로딩(하나의 이름에 여러개의 구현을 올리는 것)하여 사용해야 할 경우, 생성자 안에 똑같은 코드가 중복되지 않게 하고 싶을 때 사용.
(3) 사용법
1) 생성자에서만 사용
2) 코드 블록 안쪽이 아닌 앞쪽에서 사용
class MyClass
{
int a, b, c; // 필드: 클래스 안에 선언된 변수들
public MyClass() // 생성자: 한정자+클래스 이름()
{
this.a = 5425; // MyClas 변수 a를 5425로 선언
}
public MyClass(int b) : this() // 매개변수가 있는 생성자 this()는 {}안이 아니라 { 앞에 존재하고 MyClass()생성자를 가리킴.
{
this.b=b; // MyClass 변수 b를 b로 선언
}
public MyClass(int b, int c) : this(b) // this(b)는 MyClass(int b)를 가리킴
{
this.c=c; // MyClass 변수 c를 c로 선언
}
}
예제)
using System;
namespace ex7_7
{
class MyClass
{
int a, b, c; //MyClass의 변수선언(변수만들기)
public MyClass() //'한정자+클래스이름()': 생성자
{
this.a = 5425; //'this.a'는 MyClass의 변수 'a'를 가리키므로 a는 5425
Console.WriteLine("MyClass()");
}
public MyClass(int b):this() //MyClass()를 호출하는 (int b)를 매개변수로 갖는 생성자
{
this.b = b; //'this.b'는 MyClass의 변수 'b'를 가리킴,변수가 입력되지 않으면0출력
Console.WriteLine($"MyClass({b})");
}
public MyClass(int b,int c):this(b) // b, c의 값을 입력된 새로운 b, c의 값으로 초기화
{
this.c = c; //'this.c'는 MyClass의 변수 'c'를 가리킴,변수가 입력되지 않으면 0출력
Console.WriteLine($"MyClass({b}.{c})");
}
public void PrintFields()
{
Console.WriteLine($"a:{a},b:{b},c:{c}");
}
}
class Program
{
static void Main(string[] args)
{
MyClass a = new MyClass(); // a 객체를 생성후 실행,생성자는 생성시 자동 실행
a.PrintFields(); // PrintFields()를 호출
Console.WriteLine();
MyClass b = new MyClass(1); // b 객체를 변수 1로 생성후 실행
b.PrintFields(); // PrintFields()를 호출
Console.WriteLine();
MyClass c = new MyClass(10, 20); //b,c 객체를 변수 10, 20으로 생성및 초기화후 실행
c.PrintFields();
}
}
}
* 생성자는 자동으로 생성과 동시에 호출이 이루어짐.
출력 결과:
MyClass()
a:5425,b:0,c:0
MyClass()
MyClass(1)
a:5425,b:1,c:0
MyClass()
MyClass(10)
MyClass(10.20)
a:5425,b:10,c:20
'C#' 카테고리의 다른 글
7.9 기반 클래스와 파생 클래스 사이의 형식 변환, 그리고 is와 as 2. (0) | 2019.05.31 |
---|---|
7.9 기반 클래스와 파생 클래스 사이의 형식 변환, 그리고 is와 as 1. (0) | 2019.05.30 |
7.8 상속으로 코드 재활용하기(base키워드) (0) | 2019.05.29 |
7.7 접근 한정자로 공개 수준 결정하기(은닉성) (0) | 2019.05.28 |
7.6 this 키워드 (0) | 2019.05.27 |