728x90

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으로 지정된다.

아래는 protected접근자에 대한 예제이다.

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 : 20
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

+ Recent posts