일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- C언어 포인터
- jupyter lab
- Flutter
- Data Structure
- vim
- 플러터
- c#
- c언어
- jupyter
- git
- 다트 언어
- 구조체
- HTML
- c# 윈폼
- c# 추상 클래스
- c# winform
- Houdini
- Unity
- github
- 도커
- C++
- docker
- 깃
- 포인터
- dart 언어
- Algorithm
- Python
- C# delegate
- gitlab
- 유니티
Archives
- Today
- Total
nomad-programmer
[Programming/C#] this() 생성자 본문
class MyClass
{
int a, b, c;
public MyClass()
{
this.a = 555;
}
public MyClass(int b)
{
this.a = 555;
this.b = b;
}
public MyClass(int b, int c)
{
this.b = b;
this.c = c;
}
}
위의 코드는 문제가 있는 코드인가? 그렇지 않다. 문법적으로도 문제가 없고 동작도 잘 될 것이다. 다만 MyClass() 생성자 안에 똑같은 코드가 중복되어 들어가 있다. 비 생성적이다.
이런 고민을 해결해주는 것이 this() 이다. this가 객체 자신을 지칭하는 키워드인 것처럼, this() 는 자기 자신의 생성자를 가리킨다. this() 는 생성자에서만 사용될 수 있다. 그것도 생성자의 코드 블록의 안쪽이 아닌 앞쪽에서만 사용이 가능하다.
다음의 코드는 위의 코드를 this() 생성자를 이용해 개선한 코드이다.
class MyClass
{
int a, b, c;
public MyClass()
{
this.a = 555;
}
public MyClass(int b) : this()
{
this.b = b;
}
public MyClass(int b, int c) : this(b)
{
this.c = c;
}
}
this() 생성자의 예제
using System;
namespace CSharpExample
{
class MyClass
{
int a, b, c;
public MyClass()
{
this.a = 555;
Console.WriteLine("MyClass()");
}
public MyClass(int b): this()
{
this.b = b;
Console.WriteLine($"MyClass({b})");
}
public MyClass(int b, int c): this(b)
{
this.c = c;
Console.WriteLine($"MyClass({b}, {c})");
}
public void PrintFields()
{
Console.WriteLine($"a:{a}, b:{b}, c:{c}");
}
}
class MainApp
{
static int Main(string[] args)
{
MyClass a = new MyClass();
a.PrintFields();
Console.WriteLine();
MyClass b = new MyClass(1);
b.PrintFields();
Console.WriteLine();
MyClass c = new MyClass(10, 33);
c.PrintFields();
return 0;
}
}
}
/* 결과
MyClass()
a:555, b:0, c:0
MyClass()
MyClass(1)
a:555, b:1, c:0
MyClass()
MyClass(10)
MyClass(10, 33)
a:555, b:10, c:33
*/
'Programming > C#' 카테고리의 다른 글
[Programming/C#] 상속 : base, base() (0) | 2020.09.08 |
---|---|
[Programming/C#] 접근 한정자로 공개 수준 결정 (0) | 2020.09.08 |
[Programming/C#] 객체 복사: 얕은 복사와 깊은 복사 (2) | 2020.09.08 |
[Programming/C#] 생성자와 소멸자 (0) | 2020.09.08 |
[Programming/C#] new 연산자 (0) | 2020.09.07 |
Comments