프로퍼티의 선언
프로퍼티를 사용하면 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 |