프로퍼티의 선언


프로퍼티를 사용하면 get , set 메소드를 생성하지 않아도 숨겨진 필드에 값을 할당하거나 불러올수있다.

-데이터의 오염에대해선 메소드만큼 안전하고, 데이터를 다룰때에는 필드처럼 간결하다.


class 클래스이름

{

데이터형식 필드이름;

접근한정자 데이터형식 프로퍼티 이름

{

get

{

return 필드이름;

}

set

{

필드이름 = value;

}

}

}


get 접근자는 필드로부터 값을 읽어오고, set 접근자는 필드에 값을 할당한다. value는 선언하지않아도 C#컴파일러에서 매개변수로 간주한다.


class Myclass

{

private int myField;

public int MyFeild

{

get

{

return myField;

}

set

{

myField = value;

}

}

}


MyClass obj = new MyClass;

obj.MyField = 3;

Console.WriteLine( obj.MyField );


set 접근자를 구현하지 않으면, 읽기전용 프로퍼티 생성이 가능하다.

get 접근자를 구현하지 않으면 쓰기전용 프로퍼티 생성이 가능하지만, 클래스를 사용할 프로그래머들에게 쓰기전용 프로퍼티의 용도와 동작결과를 확인할 수 있는 방법을 알려줘야한다.


자동 구현 프로퍼티


아무 논리가 섞여있지않고, 단지 읽고쓰기는 프로퍼티를 생성할때는 자동 구현 프로퍼티를 사용하면 된다.


public class NameCard

{

public string Name

{

get; set;

}

public string PhoneNumber

{

get; set;

}

}


프로퍼티와 생성자


객체를 초기화할 때 , 매개변수를 입력해서 초기화할 수도 있지만, 프로퍼티를 사용해서 초기화할 수도 있다.


클래스이름 인스턴스 = new 클래스이름()

{

프로퍼티1 = 값, // 세미콜론 ; 이 아니고 콤마 , 를 사용한다.

프로퍼티2 = 값,

프로퍼티3 = 값

};


객체를 생성할 떄 , 프로퍼티 = 값 목록에 객체의 모든 프로퍼티가 올 필요는 없다. 초기화하고 싶은 프로퍼티만 넣어서 초기화하면 된다.


BirthdayInfo birth = new BirthdayInfo() // 메인클래스에서 객체 생성

{

Name = 서현,

Birthday = new DateTime(1991, 6 , 28)

};


무명 형식의 선언


이름이 없는 형식으로 선언한다. 이렇게 생성된 객체는 수정이 불가하다.


var myInstance = new { Name = "박상현" , Age = "17" };


Console.WriteLine( myInstance.Name , myInstance.Age );


인터페이스의 프로퍼티


인터페이스는 메소드뿐만아니라 프로퍼티와 인덱서도 가질 수 있다.인터페이스의 프로퍼티 선언은 당연히 구현을 갖지 않는다.

인터페이스의 프로퍼티 선언은 클래스의 자동구현 프로퍼티 선언과 그 모습이 동일하다.


인터페이스에서의 프로퍼티 선언


interface 인터페이스 이름

{

public 형식 프로퍼티이름1

{

get; set;

}


public 형식 프로퍼티이름2

{

get; set;

}


//

}


EX)


interface Iproduct

{

string ProductName

{

get;

set;

}

}


class Product : Iproduct

{

private string productName;


public string ProductName // 프로퍼티의 구현

{

get { return productName; }

set { productName = value; }

}

}


추상클래스와 프로퍼티


추상클래스는 클래스처럼 구현된 프로퍼티를 가질수도 , 인터페이스처럼 구현되지 않은 프로퍼티도 가질 수 있다. 이것을 추상 프로퍼티라고한다.

이는 추상메소드와 같이 단지 파생클래스가 해당 프로퍼티를 구현하도록 강제한다.


추상클래스에서의 프로퍼티선언


abstract class 추상클래스 이름

{

abstract 데이터형식 프로퍼티이름

{

get;

set;

}

}


EX)


abstract class Product

{

private static int serial = 0;

public string SerialID // 구현을 가진 프로퍼티

{

get { return String.Format(" {0:d5}" , serial++); }

}


abstract public DateTime ProductDate // 구현을 가지지않은 프로퍼티

{

get;

set;

}

}


class MyProduct : Product

{

public override DateTime ProductDate

{

get;

set;

}

}



'C#언어 > 뇌자극C#5.0' 카테고리의 다른 글

C# : Chapter -10 일반화 프로그래밍  (0) 2018.01.14
C# : Chapter -9 배열 , 컬렉션 , 인덱서  (0) 2018.01.12
C# : Chapter -7 인터페이스  (0) 2017.12.16
C# : Chapter -6 클래스  (0) 2017.12.08
C# : Chapter -5 메소드  (0) 2017.12.08

+ Recent posts