try~catch 문
try 블록과 각각 다른 예외의 처리기를 지정하는 하나 이상의 catch 절로 구성
아래의 소스는 실행시 에러와 함께 종료된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | using System; namespace TryCatchText { class Program { static void Main(string[] args) { int a, b, c; a = 10; b = 0; c = a / b; Console.WriteLine(c); } } } | cs |
실행시 에러가 뜨면서 프로그램 종료
try~catch문을 통해 예외문구를 출력하게하고 비정상 종료를 막을 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using System; namespace TryCatchText { class Program { static void Main(string[] args) { int a, b, c; a = 10; b = 0; try { c = a / b; Console.WriteLine(c); } catch (Exception e) { Console.WriteLine(e.Message); } } } } | cs |
Output :
0으로 나누려 했습니다.
계속하려면 아무 키나 누르십시오 . . .
c#에서의 접근 한정자
public
클래스의 내부/외부 모든 곳에서 접근 가능
protected
클래스의 외부에서는 접근할수 없지만, 파생 클래스에서는 접근 가능.
private
클래스의 내부에서만 접근가능.(파생클래스도 접근불가)
멤버에 접근 한정자가 명시되어 있지 않으면 암시적으로 private으로 지정된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | using System; namespace AccessModifier { class WaterHeater { int a; protected int temperature; public void SetTemperature(int temperature) // 변수가 protected이므로 public메소드로 접근. { if (temperature < -5 || temperature > 42) // -5~42사이의 값을 받음 { throw new Exception("Out of temperature range"); // 값이 범위를 벗어나면 위의 Exception문구를 출력 } this.temperature = temperature; } internal void TurnOnWater() { Console.WriteLine("Turn on water : {0}", temperature); } } class MainApp { static void Main(string[] args) { try { WaterHeater heater = new WaterHeater(); heater.SetTemperature(20); heater.TurnOnWater(); heater.SetTemperature(-2); heater.TurnOnWater(); heater.SetTemperature(50); // try~catch문을 쓰지않으면 컴파일시 처리되지않은 예외가 뜸 heater.TurnOnWater(); } catch (Exception e) { Console.WriteLine(e.Message); } } } } | cs |
Turn on water : -2 Out of temperature range
실행결과 : http://ideone.com/CgGv4G
c#에서의 상속
상속(Inheritance)은 부모(기반) 클래스의 멤버를 자식(파생) 클래스가 물려받는것이다.
기반클래스 -> 파생클래스 또는 슈퍼클래스 -> 서브클래스
라고도 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Base //기반 클래스 { //멤버 선언 public void BaseMethod(){}; } class Derived : Base //기반 클래스 : 파생 클래스 { //기반 클래스의 모든 것을 상속 받음. //단, private으로 선언된 것 제외. public void DerivedMethod() { base.BaseMethod(); //base키워드를 통해 기반 클래스에 접근 가능.(this키워드는 자기 자신) } } | cs |
상속시 멤버의 접근 지정자는 아래와 같다.
- 기반클래스의 public 멤버는 파생클래스에서도 public
- 기반클래스의 protected 멤버는 파생클래스에서도 protected
- 기반클래스의 private은 상속 불가
아래는 상속을 활용한 예제이다.
실제적으로는 파생클라스가 기반클래스의 개념들을 물려받아 더 넓은 개념을 가지게 된다.
(참고 예제 : http://rintiantta.blog.me/40113370865)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace food { class Food { public void Maked() { Console.WriteLine("(만들어짐)"); } public void Selled() { Console.WriteLine("(팔림)"); } public void Eatted() { Console.WriteLine("(먹힘)"); } } class Pizza : Food { public string TypeOfPizza; } class Chiecken : Food { public string TypeOfChicken; } class Program { static void Main(string[] args) { Pizza pizza = new Pizza(); Chiecken chinnim = new Chiecken(); pizza.TypeOfPizza = "포테이토 피자"; Console.WriteLine("{0}", pizza.TypeOfPizza); pizza.Maked(); pizza.Selled(); pizza.Eatted(); chinnim.TypeOfChicken = "갈릭 치킨"; Console.WriteLine("{0}", chinnim.TypeOfChicken); chinnim.Maked(); chinnim.Selled(); chinnim.Eatted(); } } } | cs |
Output : (http://ideone.com/fDrY8D)
포테이토 피자 (만들어짐) (팔림) (먹힘) 갈릭 치킨 (만들어짐) (팔림) (먹힘)
음식은 만들어지고 팔리고 먹힌다는 공통속성을 가지고 있다.
위와같이 "상속"을 통해 기반 클래스의 코드를 재사용하거나, 자식 클래스에서 기반클래스를 바탕으로 클래스를 확장할 수 있다.
'Study > C#' 카테고리의 다른 글
c# 복습 (0) | 2017.03.31 |
---|---|
headfirst c#-wpf (0) | 2016.11.19 |
5/27 업무일지 c#학생성적관리(콘솔) (0) | 2016.05.27 |
c# 클래스 복습2 (0) | 2016.05.23 |
2016-05-20-C#복습 (0) | 2016.05.20 |