상세 컨텐츠

본문 제목

C# 생성자 오버로딩 관련

본문

반응형

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

출처: http://blog.naver.com/PostView.nhn?blogId=dunkydonk&logNo=220234223379&categoryNo=0&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1

 

 

생성자를 여러개 만들어야 되는데, 막상 만들려고 보면 생성자에 접근하는 방법이 없죠.

 

그럴땐 이런식으로,

 

 

 

생성자 전용 이니셜라이저를 사용해주면 됩니다.

 

이니셜라이저에는 base와 this, 두가지가 있는데 base는 상속받은 클래스의 경우, 부모 클래스의 생성자를 호출하기 위해서 쓰며 this는 현재 클래스의 다른 생성자를 호출할 수 있습니다.

[출처] C# 생성자 오버로딩 방법|작성자 선천성귀차니즘

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

출처: https://qzqz.tistory.com/119

 

this 키워드

 

this는 객체가 자신을 지칭할 때 사용하는 키워드입니다.

 

클래스 내부에서 필드명과, 메서드의 매개 변수의 이름이 동일할 때

this 키워드로 모호성을 제거할 수 있습니다.

this가 붙은 변수는 클래스의 자신의 필드이며 그 외는 매개 변수입니다.

 

this 예제

 

using System; namespace This { class Employee { private string Name; private string Position; public void SetName(string Name) { this.Name = Name; } public string GetName() { return Name; } public void SetPosition(string Position) { this.Position = Position; } public string GetPosition() { return this.Position; } } class Program { static void Main(string[] args) { Employee pooh = new Employee(); pooh.SetName("Pooh"); pooh.SetPosition("Waiter"); Console.WriteLine("{0} {1}", pooh.GetName(), pooh.GetPosition()); Employee tigger = new Employee(); tigger.SetName("Tigger"); tigger.SetPosition("Cleaner"); Console.WriteLine("{0} {1}", tigger.GetName(), tigger.GetPosition()); } } }

 


this() 생성자

 

다음은 3개의 생성자 오버로딩 코드입니다.

 

class MyClass { int a, b, c; public MyClass() { this.a = 5425; } public MyClass(int b) { this.a = 5425; this.b = b; } public MyClass(int b, int c) { this.a = 4525; this.b = b; this.c = c; } }

 

MyClass() 생성자 안에 똑같은 코드가 중복되어 들어가 있습니다.

 

MyClass()는 a를 초기화하고

MyClass(int)는 b만 초기화하고 a를 초기화하는 것은 MyClass()를 호출해서 처리하면 좋을 것 같습니다.

 

그것은 this() 생성자를 이용하면 가능합니다.

this() 생성자는 자기 자신의 생성자를 가리킵니다.

this()는 생성자에서만 사용할 수 있습니다.

생성자의 코드 블록 안이 아닌 앞쪽에서만 사용이 가능합니다.

 

this() 생성자 예제

 

using System; namespace ThisConstructor { class MyClass { int a, b, c; public MyClass() { this.a = 5425; Console.WriteLine("MyClass()"); } public MyClass(int b) : this() { this.b = b; Console.WriteLine("MyClass({0})", b); } public MyClass(int b, int c) : this(b) { this.c = c; Console.WriteLine("MyClass({0}, {1})", b, c); } public void PrintFields() { Console.WriteLine("a: {0}, b: {1}, c: {2}", a, b, c); } } class Program { static void 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, 20); c.PrintFields(); } } }

 

 

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

 

 

 

반응형


관련글 더보기

댓글 영역