티스토리 뷰
자바와 같이 c#도 객체지향언어이며, 상속개념이 있다.
상속은 부모타입의 멤버들을 자손이 물려받는 것이다.
상속받는다를 확장한다라고도 표현할 수 있다. 이유는 부모의 멤버들을 자손이 물려받고 자손은 물려받은 멤버와 함께 자손 자신이 가지고 있는 멤버가 따로 있을 수도 없을 수도 있기 때문에 부모에 비해 항상 자손클래스 멤버의 수는 같거나 더 많기 때문..
다음은 상속의 예이다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace InheritApplication { class GasStation { protected int disel; protected int gasoline; public GasStation() : this(100, 50) { } public GasStation(int disel, int gasoline) { this.disel = disel; this.gasoline = gasoline; } public int Disel { get { return disel; } set { disel = value; } } public int Gasoline { get { return gasoline; } set { gasoline = value; } } } class WashGasStation : GasStation { int washingMachine = 2; public int WashingMachine{ get{return washingMachine;} set{washingMachine = value;} } public void StartWashing() { if (washingMachine <= 0) { Console.WriteLine("사용할 수 있는 세차기계가 없습니다."); return; } --washingMachine; } public void EndWashing() { ++washingMachine; } } class Program { static void Main(string[] args) { GasStation g = new GasStation(1000,500); Console.WriteLine("휘발류 용량 : {0}",g.Gasoline); WashGasStation wg = new WashGasStation(); wg.StartWashing(); wg.StartWashing(); wg.StartWashing(); wg.EndWashing(); wg.StartWashing(); } } }
c#에서의 상속은
자손클래스명 : 부모클래스명
의 형태로 이루어진다.
위 코드는 임의로 짜본 코드다. 기존의 주유소라는 부모클래스(GasStation)가 있는데 이 클래스에는 세차를 하는 기능이 없다.
그래서 세차도하고 주유도 할수 있는 세차주유소(WashGasStation)라는 클래스를 하나 만들어
부모클래스(GasStation)를 상속 받고 있다.
세차주유소 클래스는 상속을 받고 있기 때문에 부모클래스의 기능과 속성에 접근할 수 있으며, 더해서 자기 자신이 가진 세차 기능도 수행할 수 있다.
또 주목할 점은 (주로 JAVA언어를 사용하기 때문에 자바언어와 비교해본다....)
주유소(GasStation)클래스의 생성자이다.
public GasStation() : this(100, 50) { }
이 코드는 기본생성자가 다른 생성자를 부르는 코드인데. 클래스 단위의 상속 개념처럼 문장을 구성한다.
JAVA에서는 생성자의 대괄호 블럭안에서 첫번째 라인에 this(인자,인자,,,,)의 형식으로 사용하지만.
c#에서는 대괄호 블럭앞에서 : this(인자,인자,,,,,)의 형식으로 쓰이고 있다.
상속을 하지 못하게 막고 싶을 경우도 있다.
그럴 때는 sealed 예약어를 사용하면 된다,
sealed class GasStation {}
이런 형식으로 사용하면 이 클래스는 상속을 할 수 없게 된다.
'C#' 카테고리의 다른 글
모든 타입의 조상 System.Object (1) | 2016.01.22 |
---|---|
is 와 as 키워드(상속관계 및 형변환 가능 유무 판별) (0) | 2016.01.22 |
?? 키워드와 goto문 (0) | 2015.05.29 |
깊은 복사, 얕은 복사, ref, out 예약어 (0) | 2014.12.28 |
[BaseClassLibrary]직렬화/역직렬화 (0) | 2014.12.05 |