using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Constructor
{
public static void Main(string[] args)
{
//Constructor(생성자 = 모든방을 초기화 해준다.)
//-객체를 생성할때 자동으로 호출되는 메서드
//-역할 : 객체의 멤버를 초기화
//-특징 : 메서드 의 이름이 클래스의 이름과
동일
//-오버로딩이 가능하다.
//-우리가 생성자를 선언하지 않으면 기본 생성자라는 게 자동으로 생성(무조건)
// 1. 접근 지정자 public
// 2. 클래스 이름과 동일하게..
// 3. 반환값X, 인자값X
// 4. 자동으로 멤버 초기화 구문을 추가
// 5. 기본 생성자를 우리가 명시적으로 생성 가능!!
// 초기화는 값형태만된다.
//자료형 참조변수 = new연산자 => 생성자();
Test t1 = new Test();
Console.WriteLine(t1.n);
Console.WriteLine(t1.s);
Time time = new Time();
time.Check();
//60분 객체
// m : null -> 10
-> 60
Time time2 = new Time();
time2.SetTime(60);
time2.Check();
//m : null -> 60
Time time3 = new Time(60);
time3.Check();
//생성자 오버로딩의 장점
// - 원하는 형태의 객체를 다양하게 생성
}
}
class Time
{
//분 저장
private int m;
//이제부터 m의 기본 값은 10
public Time()
{
this.m = 10;
}
public Time(int m)
{
this.m = m;
}
public void Check()
{
Console.WriteLine(this.m);
Console.WriteLine("객체가 막 생성되었습니다.");
}
public void SetTime(int m)
{
//멤버 변수보다 지역변수가 더 우선 순위가 높다.(자식이기는
부모없다.)
//m = m;
this.m = m;
}
}
class Test
{
public int n;
public string s;
//기본 생성자는 인자값이 없다.
/*--------------------------------------
* 이구문이 c# 내부 코드 에 정의 되어
있어 모든 형태에 값을 초기화 해준다.
public Test()
{
//생성자의 역활 -> 멤버 초기화 전용
메서드
this.n = 0;
this.s = null;
}
--------------------------------------*/
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleEx
{
//Ex86_ctor.cs
class Ex86_ctor
{
static void Main(string[]
args)
{
Time t1 = new Time();
t1.CheckTime();
Time t2 = new Time(2, 150);
t2.CheckTime();
Time t3 = new Time(100);
t3.CheckTime();
}
}
//DateTime
class Time
{
private int hour;//시
private int min;//분
//12:00 초기화 - 기본 생성자
public Time()
{
this.hour = 12;
this.min = 0;
}
//추가] 원하는 시,분으로 객체를 생성했으면..
public Time(int hour, int min)
{
if (hour >= 0)
this.hour
= hour;
if (min >= 0)
{
if (min
>= 60)// new Time(5, 80)
{
this.hour
= this.hour + min / 60;//6
this.min
= min % 60;//20
}
else
{
this.min
= min;
}
}
}
//추가] 편의성 : new Time(100);
public Time(int min)
{
if (min >= 60)
{
this.hour
= min / 60;//1
this.min =
min % 60;//40
}
else if (min >= 0)
{
this.hour
= 0;
this.min =
min;
}
}
//확인 메서드
public void CheckTime()
{
Console.WriteLine("{0} : {1}", this.hour,
this.min);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Ctor03
{
static void Main(string[]
args)
{
//Test t = new Test();
//Console.WriteLine(t.n);
//Console.WriteLine(Test.m);
//정적변수 m을 20으로 초기화하기 위해서 사용하지도 않을 Test 객체 t1을 생성
Console.WriteLine(Test.m);
}
class Test
{
public int n;
public static int m;
//객체 생성자
//객체 멤버를 초기화
public Test()
{
this.n =
10;
}
//접근 지정자가 없다.
//정적생성자 : 객체 멤버는 초기화 할수
없다 오로지 정적 멤버만 초기화가 가능하다.
//-Main() 메서드 실행전에 자동으로 호출
static Test()
{
Test.m = 20;
}
}
}
}
--------------------------------------------간편화--------------------------------------------
//추가] 원하는 시,분으로 객체를 생성했으면..
public Time(int hour, int min)
{
if (hour >= 0)
this.hour
= hour;
if (min >= 0)
{
if (min
>= 60)// new Time(5, 80)
{
this.hour
= this.hour + min / 60;//6
this.min
= min % 60;//20
}
else
{
this.min
= min;
}
}
}
//추가] 편의성 : new Time(100);
public Time(int min)
{
if (min >= 60)
{
this.hour
= min / 60;//1
this.min =
min % 60;//40
}
else if (min >= 0)
{
this.hour
= 0;
this.min =
min;
}
}
public Time(int min)
: this (0, min) {}
--------------------------------------------간편화--------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Ctor04
{
static void Main(string[]
args)
{
//인스턴스를 생성하는 이유는 데이터 저장
//클래스 내부에 따로 데이터 저장이 없고 메소드만 선언 되어 있따면 static 형태로 선언 하는 것이 좋다.
//Test t = new Test();
//t.Plus(10, 20);
//t.Minus(10, 3);
Test.Plus(5, 4);
Test.Minus(1, 4);
}
class Test
{
//객체 생성 방지
private Test()
{
}
public static void Plus(int a, int b)
{
Console.WriteLine(a
+ b);
}
public static void Minus(int a, int b)
{
Console.WriteLine(a
- b);
}
}
}
}