try~catch 문
try 블록과 각각 다른 예외의 처리기를 지정하는 하나 이상의 catch 절로 구성
아래의 소스는 실행시 에러와 함께 종료된다.
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);
}
}
}
실행시 에러가 뜨면서 프로그램 종료
try~catch문을 통해 예외문구를 출력하게하고 비정상 종료를 막을 수 있다.
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);
}
}
}
} |
Output :
0으로 나누려 했습니다.
계속하려면 아무 키나 누르십시오 . . .
c#에서의 접근 한정자
public
클래스의 내부/외부 모든 곳에서 접근 가능
protected
클래스의 외부에서는 접근할수 없지만, 파생 클래스에서는 접근 가능.
private
클래스의 내부에서만 접근가능.(파생클래스도 접근불가)
멤버에 접근 한정자가 명시되어 있지 않으면 암시적으로 private으로 지정된다.
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; // public 메소드로 protect에 접근한다.
}
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);
// catch 블록으로 이동. try~catch문을 쓰지않으면 실행시 처리되지않은 예외가 뜸
heater.TurnOnWater();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
} |
Turn on water : 20 Turn on water : -2 Out of temperature range
실행결과 : http://ideone.com/CgGv4G
c#에서의 상속
상속(Inheritance)은 부모(기반) 클래스의 멤버를 자식(파생) 클래스가 물려받는것이다.
기반클래스 -> 파생클래스 또는 슈퍼클래스 -> 서브클래스
라고도 한다.
class Base //기반 클래스
{
//멤버 선언
public void BaseMethod(){};
}
class Derived : Base //기반 클래스 : 파생 클래스
{
//기반 클래스의 모든 것을 상속 받음.
//단, private으로 선언된 것 제외.
public void DerivedMethod()
{
base.BaseMethod(); //base키워드를 통해 기반 클래스에 접근 가능.(this키워드는 자기 자신)
}
} |
this키워드가 자기 자신을 가리키는 반면, base 키워드는 기반 클래스를 가리킨다.
base키워드를 이용해 파생클래의 생성자에서 기반클래스의 생성자의 매개변수를 넘겨줄 수 있다.
public Derived (string Name) : base(Name) { }
상속시 멤버의 접근 지정자는 아래와 같다.
- 기반클래스의 public 멤버는 파생클래스에서도 public
- 기반클래스의 protected 멤버는 파생클래스에서도 protected
- 기반클래스의 private은 상속 불가
아래는 상속을 활용한 예제이다.
실제적으로는 파생클라스가 기반클래스의 개념들을 물려받아 더 넓은 개념을 가지게 된다.
(참고 예제 : http://rintiantta.blog.me/40113370865)
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();
}
}
} |
Output : (http://ideone.com/fDrY8D)
포테이토 피자 (만들어짐) (팔림) (먹힘) 갈릭 치킨 (만들어짐) (팔림) (먹힘)
음식은 만들어지고 팔리고 먹힌다는 공통속성을 가지고 있다.
위와같이 "상속"을 통해 기반 클래스의 코드를 재사용하거나, 자식 클래스에서 기반클래스를 바탕으로 클래스를 확장할 수 있다.
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
2016-07-05_조재찬_스터디일지-LCD 모듈 제어 (0) | 2016.07.05 |
---|---|
2016_0606_개인스터디일지_아두이노_포토레지스터를 이용한 RGB LED 색상 변화 (0) | 2016.06.06 |
리눅스 커널 4.6 공개··· ARM·터치 지원 등 강화 (0) | 2016.06.02 |
오픈소스 버그를 잡는 블랙덕 무료 툴 ‘Security Checker’OSS (0) | 2016.06.01 |
2016-05-20_조재찬_스터디일지-C# 메소드와 클래스 복습 (0) | 2016.05.20 |
이름 (0) | 2016.05.20 |
2016-05-19_조재찬_업무일지_ AVR-LCD출력 & C#-성적관리 프로그램 (0) | 2016.05.20 |
2016-05-18_조재찬_스터디일지_ C#-설문조사 APP, 기초복습 (0) | 2016.05.19 |