Computer[] machines;
machines = new Computer[3];
machines[0] = new NoteBook();
machines[1] = new Desktop();
machines[2] = new NetBook();
DeviceManager manager = new DeviceManager();
foreach(Computer device in machines)
{
manager.TurnOff(device);
}
캡슐화
클래스 내에 외부에서 바로 수정할수 없도록 변수를 private로 선언한 다음 메소드를 통해 값을 호출하거나
수정하는 방식. 이 메서드를 통해 값을 수정할때 개발자가 정한 범위 내에서만 사용할 수 있게끔 만들수도 있다.
프로퍼티
캡슐화를 쉽게 하기위한 수단. get 으로 클래스의 원하는 변수값을 리턴받고 set으로 클래스이 변수값을 수정할 수 있게 만들어 준다. 컴파일 할때에는 각각 get메서드와 set 메서드로 비주얼 스튜디오가 자동으로 바꿔서 컴파일 하게된다.
예제) 차의 시속이 150km가 넘지 않도록 하기
class Car
{
int iSpeed; // iSpeed를 캡슐화 시켰다
public int Speed // 프로퍼티는 컴파일 할떄 set, get 메서드로 분리된다.눈속임
{
get { return iSpeed; }
set
{
if (150 < value)
{
value = 150;
}
iSpeed = value;
}
}
}
static void Main(string[] args)
{
Car mycar = new Car();
mycar.Speed = 100;// set으로 speed 설정
Console.WriteLine("현재 속도 : 시속 {0}km", mycar.Speed);//get에서 리턴값받음
mycar.Speed = 300;
Console.WriteLine("현재 속도 : 시속 {0}km", mycar.Speed);
}
}
상속 136p
상속받을 때 기호를 사용한다
public 자녀클래스 : 부모클래스
상속을 못받도록도 가능함. sealed
sealed class Pen
C#은 단일상속만 가능하다 예를들어 class NoteBook : Computer, Machine 이 불가능
public class Computer
{
protected bool powerOn;
public void Boot()
{
Console.WriteLine("컴퓨터를 킵니다");
}
public void Shutdown()
{
Console.WriteLine("컴퓨터를 종료합니다");
}
public void Reset()
{
Console.WriteLine("컴퓨터를 리셋합니다");
}
bool fingerScan;
public bool HasFingerScanDevice()
{
return fingerScan;
}
}
public class NoteBook : Computer
{
}
public class Desktop : Computer
{
}
public class NetBook : Computer
{
}
class Program
{
static void Main(string[] args)
{
NoteBook notebook = new NoteBook();
Computer pc1 = notebook; // 자식클래스는 부모클래스를 가지고있음. 묵시적 형변환을 허용함
NoteBook note2 = (NoteBook)pc1; //명시적 형변환,노트북 형이 없는데 있다고 하고 컴파일 했기 때문에 이것으로 인한 문제점은 개발자 책임.
object z = pc1; // z는 최고 조상
}
}
부모클래스를 두고 자식클래스를 여러개 두면 부모클래스를 상속받아 자식클래스로 선언할 수 있어서
여러개의 클래스를 관리하기가 쉬워진다.
NoteBook notebook = new NoteBook();
Desktop desktop = new Desktop();
NetBook netbook = new NetBook();
DeviceManager manager = new DeviceManager();
manager.TurnOff(notebook);
manager.TurnOff(desktop);
manager.TurnOff(netbook);
'컴퓨터 > C#' 카테고리의 다른 글
[C#] Array 타입 (0) | 2020.06.02 |
---|---|
[C#] Object 타입 (0) | 2020.06.02 |
[C#] Main문 매개변수 args 사용해보기, ERRORLEVEL 환경변수로 return값 확인 (0) | 2020.05.31 |
[C#] 종료자, 정적멤버와 인스턴스멤버, 정적 메서드, 접근제한자, 싱글톤 (0) | 2020.05.29 |
[C#] 메모장에 소스적어 컴파일 하기 (0) | 2020.05.29 |