// 널(Null) 가능 형식
// 정수형 등의 변수는 반드시 초기화해서 사용해야 한다.
// 변수 선언시 ?를 붙이면 null 값으로 초기화할 수 있다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Nullable형식
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 100;
            int? ni = null;
            double? nd = 12.34;

            if (ni.HasValue) // 널값이면 false, 값이 있으면 참
            {
                Console.WriteLine("{0}", ni.Value);
            }
            else
            {
                Console.WriteLine("널값입니다.");
            }
        }
    }
}

Posted by holland14
:

// 명령줄인수(Command Line Prompt) :
// dir c:\ 식으로 명령어(exe) 뒤에 따라오는 문자열
// 예)
// 명령줄인수.exe 1 100 3  =>  1부터 100까지 3의 배수의 합을 구하는 프로그램
// 명령줄인수.exe 1 50 2  => 1부터 50까지 2의배수(짝수)의 합
// MyCalc.exe 1 + 3 엔터 => 1 + 3 = 4
// MyCalc.exe 3 * 7 엔터 => 3 * 7 = 21
// MyCalc.exe 6 - 2 엔터 => 6 - 2 = 4
// MyCalc.exe 8 / 4 엔터 => 8 / 4 = 2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace 명령줄인수
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("명령줄인수는 3개 이상 필요합니다.");
                return;
            }
            int first = Convert.ToInt32(args[0]);
            char op = Convert.ToChar(args[1]);
            int second = Int32.Parse(args[2]); // Int32의 Parse메서드를 사용해서 쓸수도 있다. Convert.ToInt32(args[0]);와 값은 똑같다.
            int num = 0;
            //int sum = 0;
            //for (int i = first; i <= second; i++)
            //{
            //    if (i % num == 0)
            //    {
            //        sum += i;
            //    }
            //}
            //Console.WriteLine("{0}~{1}까지 {2}의배수의 합: {3}", first, second, num, sum);

            if (op == '+')
            {
                num = first + second;
                Console.WriteLine("{0} {1} {2} == {3}", first, op, second, num);
            }
            if (op == '-')
            {
                num = first - second;
                Console.WriteLine("{0} {1} {2} == {3}", first, op, second, num);
            }
            if (op == '*')
            {
                num = first * second;
                Console.WriteLine("{0} {1} {2} == {3}", first, op, second, num);
            }
            if (op == '/')
            {
                num = first / second;
                Console.WriteLine("{0} {1} {2} == {3}", first, op, second, num);
            }
        }
    }
}

Posted by holland14
:

프로그래밍 언어


1. IDE(Integrated Development Environment) 설치
     a. Windows Server
     b. SQL Server
     c. Visual Studio
     d. Office System

2. 기본구조
     a. Hello World 프로그램

3. 기본입출력문
     a. Console.WriteLine()
     b. Console.ReadLine()
     c. Console.ReadKey()
     d. 자리표시자/자리채움자/PlaceHolder : {n}
     e. 이스케이프 시퀀스(Escape Sequence)/특수 기호/이스케이프 문자
          i. \n, \b, \t
          ii. \0 : 널(NULL) 문자, 값이 없다???, 종결 문자열

4. 데이터형식(DataType)/변수(Variable)/상수(Constant)
     a. 데이터 형식(Data Type) : C#은 데이터 형식이 풍부
          i. 정수 : int
          ii. 실수 : double, float
          iii. 문자 : char
          iv. 문자열 : string
          v. 객체 : object
          vi. 불린 : bool
     b. 변수 : 메모리 상의 임시 데이터 저장 공간
     c. 상수 : 한번 설정 후 값이 변하지 않는 변수

5. 연산자
     a. 산술 : +, -, *, /, %
     b. 대입 : =, +=, -=
     c. 비교 : ==, !=
     d. 논리 : &&, ||, !
     e. 증감 : ++, --
     f. 조건(3항) : ?:
     g. 시프트 : <<, >>
     h. 비트 : &, |, ^
     i. 기타 : 닷넷에서만 제공하는 연산자

6. 제어문
     a. 조건문
          i. if
          ii. switch
     b. 반복문
          i. for : 구간반복
          ii. while : 조건반복
          iii. do : 실행반복
          iv. foreach : 배열/컬렉션 반복
     c. 기타(점프)
          i. break
          ii. continue
          iii. goto
          iv. return

7. 배열(Array) :
     a. Variable : (데이터 저장 관점)하나의 이름으로 하나의 데이터형식을 가지는 하나의 데이터만 저장
     b. Array : 하나의 이름으로 동일한 데이터형식을 여러 개 저장할 수 있는 구조
     c. 종류
          i. 1차원 배열
          ii. 다차원 배열(2차원, 3차원, …)
          iii. 배열의 배열

8. 함수(메서드)(Function/Sub Procedure/Method) : 자주 사용하는 코드블록(패턴)을 하나의 이름으로 만들어 놓은 코드의 집합, 사용 목적 : 재 사용
     a. 매개변수(Parameter)가 없는 함수
     b. 매개변수(Argument)가 있는 함수 : Sub Procedure
     c. 반환값(Return Value)가 있는 함수 : Function

9. 구조체(Struct)
     a. 설명
          i. 변수(Variable) : 하나의 이름으로 하나의 데이터형식을 하나만 저장
          ii. 배열(Array) : 하나의 이름으로 하나의 DataType(int, string)을 여러 개 저장
          iii. 구조체(Struct) : 하나의 이름으로 여러 개의 DataType을 한 개/여러 개 저장
               1) static 붙이면 : 정적 접근이 가능, 쩜 찍었을 때 멤버가 노출
               2) static 빼면 : 인스턴스(변수 선언해야 사용) 접근이 가능
          iv. 클래스(Class) : 구조체의 모든 기능 + 함수(메서드;동작;기능)
     b. 내장 구조체 : 이미 만들어져 있는
          i. 날짜/시간차 관련 구조체 : DateTime, TimeSpan
          ii. 문자(Char) 구조체
          iii. …
10. 열거형(Enumeration)
     a. C#에서 열거형은 기억하기 어려운 상수들의 집합을 기억하기 쉬운 하나의 이름으로 묶어서 관리하는 표현 방식이다. 열거형은 enum 키워드를 사용한다. 참고로, 이미 만들어져 있는 열거형을 편리하게 자주 사용하나, 우리가 만들어서 작성하는 경우는 초반에는 적다…

11. 클래스(Class)
     a. 구조체의 모든 기능 + 메서드(함수) 포함
     b. 현실세계 : 자동차의 설계도 역할
     c. 프로그램세계 : public class Car { }
     d. 클래스 : 자동차 설계도
     e. 개체(객체;Object;오브젝트) : 자동차 설계도로부터 생성(조립;인스턴스화)된 하나의 단위(변수)
          i. Instance : 클래스로부터 만들어진 하나의 개체, 새로운 실체 => 개체
          ii. 개체, 객체, 오브젝트, 인스턴스, 컨트롤, => 컴포넌트, 프레임워크
     f. 구조체와 마찬가지로 하나의 Data Type(데이터 형식)이 된다.
     g. Static과 Instance
          i. 정적 접근 : 개체 생성하지 않고도 멤버에 접근 : 작은 개념
          ii. 인스턴스 접근 : 반드시 new 연산자를 통해서 객체 생성 후 멤버에 접근
               1) 클래스명 개체명 = new 클래스명();
12. 필드(Field)
     a. 자동차의 부품 역할 : 부품은 꽁꽁 숨겨라… 캡슐화(Encapsulation)
     b. 클래스내에 선언된 멤버 변수(Member Variable) : 전역 변수(Global Variable)와 비슷
     c. 필드는 초기화하지 않아도 자동 초기화
          i. Int형 : 0으로
          ii. String형 : String.Empty로
          iii. 필드는 public 접근 한정자(Access Modifier)를 붙여도 되지만, 개념상 private 접근 수식자를 붙인다.
               1) public string name; => private string name;
     d. 현재까지 교재 학습 : 171페이지~182페이지 내용 읽어보세요…

13. 생성자(Constructor) : 182페이지
     a. 자동차 시동걸기/조립 등의 행위(메서드)
     b. 클래스명과 동일한 이름의 반환값이 없는 메서드
     c. 클래스의 필드 초기화시키는 역할
     d. 개체생성시 제일 먼저 실행되는 메서드
     e. 종류
          i. Public 생성자 : 개체의 인스턴스 생성시 호출
          ii. Static 생성자 : static 접근시 호출, 매개변수를 가질 수 없음

14. 소멸자(Desctructor) : 188페이지까지… 정독
     a. 자동차 폐차, 주차 및 시동끄기
          i. 싼 개념 : 본인이 직접 주차 및 시동끄기
          ii. 비싼 개념 : 주차요원(GC)이 대신
     b. GC 엔진에 의해서 사용하므로, 개발자가 건드릴 일 없다.
     c. 클래스에서 제일 마지막에 실행되는 메서드

15. 메서드(Method):205~209페이지
    a. 자동차의 동작 : 전진(), 후진(), 좌회전()
    b. 클래스의 기능 : 개체가 수행할 수 있는 기능/동작/행위 등
    c. 매개변수 전달 방식 4가지 비교(메서드 호출, 메서드 선언)
 i. 값 전달 방식(val) : call by value, 값만 전달
        ii. 참조 전달 방식(ref) : call by reference, 데이터는 호출쪽에만 저장
        iii. 반환형 전달 방식(out) : 변수를 초기화하지 않고, 함수에서 초기화시켜준다.
        iv. 가변형 전달 방식(params) : 여러 개의 매개변수가 필요할 때
    d. 메서드 오버로드/오버로딩(Overload): 다중 정의
 i. 클래스내에 동일한 이름의 메서드를 매개변수를 달리해서 여러 개(다중) 선언

16. 속성(Property) : 210~217p
    a. 클래스 내의 필드의 내용을 설정(set)하거나 참조(get)할 때 사용하는 코드 블록
    b. 개체의 성질/특징/색상/크기/모양 등등의 정의할 때 사용
    c. 빨간색, 바퀴 4개 등의 속성을 가지는 자동차 개체
    d. private한 필드를 public한 속성으로 외부에 공개
    e. C/C++에서는 주로 GetXXX(), Set() 함수를 사용

17. 인덱서(Indexer) // ==> "속성의 확장판"
    a. 개체를 배열형식으로 표현
    b. 자동차 개체의 카탈로그(?)
         i. 현대[0] = "에쿠스"; 현대[1] = "소나타"; => 정수형 인덱서(서수 사용)
             1) 현대.FirstCar = "에쿠스"; 현대.SecondCar = "제네시스"; 
             2) 현대.GetName(0) = "'에쿠스"; 현대.GetName(1) = "제네시스";
         ii. 현대["첫번째"] = "에쿠스"; 현대["신차"] = "제네시스"; => 문자열 인덱서
         iii. 출력 : 첫번째 자동차를 출력한다면???
             1) 현대.GetName(0); // 메서드 호출
             2) 현대.FirstCar; // 속성 호출
             3) 현대[0]; // 정수형 인덱서
             4) 현대["첫번째"]; // 문자열 인덱서
    c. 반복기(Iterator)
         내가 만든 객체를 foreach문으로 돌리고자할 때 반복기가 구현되어있어야 함.
         foreach문은 GetEnumerator함수를 호출한다. 'GetEnumerator()메서드'의 반환값은 'IEnumerator인터페이스'이다.

18.대리자(Delegate) : 317~332페이지(332페이지는 나중에)
    a. 대리자, 위임, 델리게이트
    b. 한번 호출로 하나 이상의 메서드를 대신해서 호출하는 개념
 i. 다중 메서드 호출
    c. 메서드 -> (확장) -> 대리자 ->(확장) -> 이벤트
    d. 대리자는 이벤트를 만들기 위한 중간 단계로만 사용된다.
    e. 자동차로 따지면, 말 그대로 대리운전
 i. 집으로 갑시다()
     1) 전진() -> 좌회전() -> 우회전() -> 후진()
    f. 무명(익명:Anonymous) 메서드 : 대리자에 등록되는 메서드 중 간단한 기능이면 생략해서 사용하고자 할 때

19. 이벤트(Event)
    a. 개체가 수행할 수 있는 동작(메서드)의 수행 결과(사건/사고/이벤트)
    b. 윈도우 응용프로그램에서 마우스 클릭 이벤트, 마우스 오버 이벤트, 더블클릭 이벤트
    c. 자동차로 예로 들면,
 i. 자동차설계도(클래스)로부터 하나의 빨간색 스포츠카(속성) 자동차(개체)를 만들어서, 시동걸고(생성자) 전진 및 좌회전(메서드)을 하면서, 가끔은 대리운전(대리자)도 부르고, 그러다가 과속(메서드)이라는 기능 수행 결과 교통사고(이벤트) 사고가 발생해서, 그나마 멀쩡한 카오디오(필드) 중고로 팔고, 폐차(소멸자)했다.

20. 네임스페이스(Namespace) :  교재62페이지
    a. 자동차 브랜드
 i. 현대자동차
        ii. 삼성자동차
    b. 서로 관련있는 클래스를 묶어서 관리
    c. 중첩가능
 i. System.Web.UI
        ii. System.Collection
 iii. RedPlus.Library.Menu.dll
 iv. RedPlus.Library.Board.dll

21. 인터페이스(Interface)
    a. 추상 클래스와 같이 다른 클래스에게 멤버명을 미리 강제로 사용토록 할 때
    b. 인터페이스는 몀버명만 갖는반면, 추상클래스는 다름 멤버도 가질 수 있다.
    c. 인터페이스는 자동차로 따지면, 전세계표준(ISO), 국내표준㉿ 등의 의미를 지닌다.
    d. C#은 다중상속이 불가능하지만(C++가능), 인터페이스 다중 상속은 가능하다.
    e. 자동차 규격, 예를들어 배터리 충전(점프선)

22. 특성(Attribute) : 코드에 대한 설명문(메타데이터)
    a. 멤버 앞에 [특성(특성값)] 식으로 붙여서 사용
    b. 분야(Web,XML, ...)에 따라서 많은 내장 특성이 있다.
    c. 사용자 정의 특성을 만들고자할 때에는 System.Attribute를 상속받아 설계
    d. 특성을 통해서 런타임시에 추가적인 기능을 부여 가능
    e. 자동차로 따지자면, 자동차 액세서리

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

66. Nullable형식(=Null가능형식)  (0) 2009.08.17
65. 명령줄인수  (0) 2009.08.17
"상속(Inheritance)" 필기  (0) 2009.08.14
64. 봉인클래스(Sealed)  (0) 2009.08.14
63. 인터페이스(Interface)  (0) 2009.08.14
Posted by holland14
:
 

상속(Inheritance) : 클래스들간의 관계

 

클래스 상속

  • 개체 지향 프로그래밍의 장점 중의 하나는 이미 만들어져 클래스를 재사용 하는 것이다. 재사용에 대한 핵심개념이 바로 상속이다.
  • 부모의 재산을 자식에게 상속하듯이 부모클래스(기본클래스) 모든 멤버를 자식클래스(파생클래스)에게 재사용토록 허가하는 기능을 의미한다.
  • 여러 클래스들 간의 관계를 설정함에 있어서 수평 관계가 아닌 부모와 자식간의 관계처럼 계층적인 관계를 표현하고자 사용하는 개념을 상속이라 한다.

 

Object 클래스 : 교재347~348페이지

  • 모든 클래스들의 부모 클래스
  • 닷넷에서 가장 높은 층에 속하는 시조격 클래스
  • 새롭게 만들어지는 모든 클래스들은 Object 클래스로부터 상속 받음(생략 가능)

 

기본(Base) 클래스

  • 다른 클래스의 부모 클래스가 되는 클래스
  • Base 클래스 또는 부모(Parent) 클래스로 표현

 

파생(Derived) 클래스 : Sub

  • 다른 클래스로부터 멤버를 물려받은 클래스
  • Derieved 클래스 또는 자식(Child) 클래스로 표현

 

접근 한정자 :  Access Modifier

public : 공용, 외부에 공개

private : 전용, 내부에서만 사용

protected : 제한적인, 자식에게만 공개

internal : 어셈블리(DLL) 파일 내에서만 공개

 

(다시) 정의 : 오버라이드(Override) : 부모와 자식간의 멤버명이 충돌???

  • 부모와 자식이 동일 : 인스턴스 생성시 사용한 클래스의 멤버
  • 부모에는 아무것도 안붙이고, 자식에는 new키워드를 붙여서 하위(자식클래스)에서 새롭게 정의한다.
  • 부모 virtual, 자식에는 override : 제일 좋은 형태
  • 부모 abstract, 자식에는 override

 

ToString() 메서드 오버라이드

  • Object 클래스에 정의되어 있는 ToString() 메서드는 기본적으로 클래스의 이름값을 반환시켜준다.
  • 또는 정수형과 같이 대표가 되는 값이 들어있는 경우는 값을 문자열로 변환해서 출력해준다.
  • 내가 만든 클래스의 대표가 되는 속성 또는 값을 외부에 인스턴스명으로 사용해서 출력하고자 때에는  ToString() 메서드를 재정의(Override)해서 사용해야 한다.

 

추상 클래스(Abstract)

  • 클래스 설계시 부모 클래스 역할을 하면서, 강제로 자식 클래스에게 특정 멤버명을 물려주고자 정의
  • 추상클래스는 멤버의 실제 내용을 구현하지 않고, 자식 클래스에서 멤버를 구현
  • 주로 선임이 추상클래스, 후임이 추상클래스를 상속받은 클래스 구현

 

인터페이스(Interface)

  • 추상 클래스와 같이 다른 클래스에게 멤버명을 미리 강제로 사용토록
  • 인터페이스는 몀버명만 갖는반면, 추상클래스는 다름 멤버도 가질 있다.
  • 인터페이스는 자동차로 따지면, 전세계표준(ISO), 국내표준㉿ 등의 의미를 지닌다.
  • C# 다중상속이 불가능하지만(C++가능), 인터페이스 다중 상속은 가능하다.
  • 자동차 규격, 예를들어 배터리 충전(점프선)

 

봉인클래스(Sealed) : 최종 클래스, 마지막 클래스

  • 이상 상속되지 않는 클래스
  • Sealed 키워드를 붙여서 상속금지시킨다.

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

65. 명령줄인수  (0) 2009.08.17
C# 프로그래밍 관련 단어정리  (0) 2009.08.14
64. 봉인클래스(Sealed)  (0) 2009.08.14
63. 인터페이스(Interface)  (0) 2009.08.14
62. 추상클래스(Abstract)  (0) 2009.08.14
Posted by holland14
:


==> 봉인클래스.cs



using System;

public class 봉인클래스
{
    public static void Main()
    {
        Sonata s = new Sonata();
    }
}



==============================================================================================



==> Car.cs



using System;
public interface IIso { }
public interface IKs { }
public abstract class Car { }
public class Hyundai : Car, IIso, IKs
{

}

public sealed class Sonata : Hyundai
{

}

//public class Other : Sonata
//{
//    // 실행결과 에러가 난다. 하나의 완성된 제품이므로 더이상 상속해서 쓸 필요가 없다는 의미이다.
//}



'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

C# 프로그래밍 관련 단어정리  (0) 2009.08.14
"상속(Inheritance)" 필기  (0) 2009.08.14
63. 인터페이스(Interface)  (0) 2009.08.14
62. 추상클래스(Abstract)  (0) 2009.08.14
61. ToString메서드오버라이드  (0) 2009.08.14
Posted by holland14
:


==> 인터페이스.cs



using System;

public class 인터페이스
{
    public static void Main()
    {
        Sonata sonata = new Sonata();
        sonata.Run();
        sonata.Left();
        sonata.Right();
        sonata.Back();
    }
}



==============================================================================================



==> Car.cs



using System;
// Interface : ISO 규격 : 전세계표준
public interface IIso // 인터페이스 이름 : I대문자 그다음 첫자도 대문자로 표기한다.
{
    void Run(); // 이름만 정의(멤버가 없다.)
}

// Interface : KS 규격 : 한국표준
public interface IKs
{
    void Back();
}

// Abstract : 현대자동차 규격
public abstract class Hyundai : IIso, IKs // Hyundai는 IIso, IKs의 상속을 받는다.
{
    public void Run() { Console.WriteLine("전진"); }
    public void Back() { Console.WriteLine("후진"); }
    public abstract void Left(); // 추상메서드    
}
// Class : Sonata
public class Sonata : Hyundai // Sonata는 Hyundai의 상속을 받는다.
{
    public override void Left()
    {
        Console.WriteLine("좌회전");
    }
    public void Right()
    {
        Console.WriteLine("우회전");
    }
}

 

/*
- 추상클래스는 추상메서드 외에도 일반메서드들도 와도 된다.
- 인터페이스와 추상클래스는 멤버내용( {~} )이 없다. 이름만 있다.
*/

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

"상속(Inheritance)" 필기  (0) 2009.08.14
64. 봉인클래스(Sealed)  (0) 2009.08.14
62. 추상클래스(Abstract)  (0) 2009.08.14
61. ToString메서드오버라이드  (0) 2009.08.14
60. 부모의 멤버접근  (0) 2009.08.14
Posted by holland14
:


==> 추상클래스.cs



using System;

public class 추상클래스
{
    public static void Main()
    {
        Sonata son = new Sonata();
        son.Run(); // 표준
        son.Left(); // 공통
        son.Right(); // 자체
    }
}



==============================================================================================



==> Car.cs


using System;
// 국내표준 : 강제성 => 추상
public abstract class KS
{
    // 추상메서드
    public abstract void Run();
}

// 현대공통
public class Hyundai : KS
{
    public override void Run()
    {
        Console.WriteLine("전진");
    }

    public virtual void Left()
    {
        Console.WriteLine("좌회전");
    }
}

// 소나타만의 기능
public class Sonata : Hyundai
{
    public void Right()
    {
        Console.WriteLine("우회전");
    }
}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

64. 봉인클래스(Sealed)  (0) 2009.08.14
63. 인터페이스(Interface)  (0) 2009.08.14
61. ToString메서드오버라이드  (0) 2009.08.14
60. 부모의 멤버접근  (0) 2009.08.14
59. 자동차클래스상속  (0) 2009.08.14
Posted by holland14
:


== > ToString메서드오버라이드.cs



using System;

public class ToString메서드오버라이드
{
    public static void Main()
    {
        // 모든 변수 : 클래스명
        System.Collections.Stack s = new System.Collections.Stack();
        Console.WriteLine("{0}", s.ToString()); // 기본값 : 클래스명

        // 정수형 변수
        Int32 intNum = 1234;
        Console.WriteLine("{0}", intNum.ToString()); // 정수형 -> 문자열 형변환

        // 내가 만든 클래스에 ToString()을 요청했을 때???
        // 특정한 필드의 값을 바로 출력...
        Car car = new Car();
        Console.WriteLine(car.Name);
        Console.WriteLine(car);

        Car sonata = new Car("소나타");
        Console.WriteLine(sonata.Name);
        // ToString 메서드 오버라이드
        Console.WriteLine("{0}", sonata.ToString());
        Console.WriteLine("{0}" ,sonata);
    }

}



==============================================================================================



==> Car.cs



using System;

public class Car
{
    private string name; // Field
    public string Name // Property
    {
        get { return name; }
        set { name = value; }
    }
    public Car() // Constructor
    {
        this.name = "자동차";
    }

    public Car(string name)
    {
        this.name = name;
    }

    public override string ToString()
    {
        return name; // name값 출력
    }
}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

63. 인터페이스(Interface)  (0) 2009.08.14
62. 추상클래스(Abstract)  (0) 2009.08.14
60. 부모의 멤버접근  (0) 2009.08.14
59. 자동차클래스상속  (0) 2009.08.14
58. 클래스상속  (0) 2009.08.14
Posted by holland14
:


==> 부모의멤버접근.cs



using System;

public class 부모의멤버접근
{
    public static void Main()
    {
        Hyundai sonata = new Hyundai("소나타");
        sonata.Run(); // 소나타가 달린다.

        Hyundai santafe = new Hyundai();
        santafe.Run(); // 현대자동차가 달린다.

        Samsung sm = new Samsung();
        sm.Run();
    }
}



==============================================================================================



==> Car.cs


using System;

public class Car
{
    private string name; // 이름
    public Car()
    {

    }
   
    public Car(string name)
    {
        this.name = name;
    }

    public void Run()
    {
        Console.WriteLine("{0}가 달린다.", this.name);
    }
}

public class Hyundai : Car
{
    public Hyundai() : this("현대자동차")
    {
        // Empty
    }

    public Hyundai(string name) : base(name) // 생성자
    {
        // 부모클래스 : base
       
    }
}

public class Samsung : Car
{
    public Samsung() : base("삼성자동차") { }
}




/*
this는 '나 자신' / base는 '부모'를 나타내다.
*/

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

62. 추상클래스(Abstract)  (0) 2009.08.14
61. ToString메서드오버라이드  (0) 2009.08.14
59. 자동차클래스상속  (0) 2009.08.14
58. 클래스상속  (0) 2009.08.14
57. 네임스페이스(Namespace)  (0) 2009.08.14
Posted by holland14
:


==> 상속.cs



using System;

public class 상속 : Object
{
    public static void Main()
    {
        //Car car = new Car();
        //car.Run();

        Hyundai sonata = new Hyundai();
        sonata.Run(); // 공통
        sonata.Left(); // 전용

        GM matiz = new GM();
        matiz.Run();
        matiz.Right();
    }

}




==============================================================================================



==> Car.cs



using System;
// 공통
public class Car : Object
{
    public void Run()
    {
        Console.WriteLine("전진");
    }

    public virtual void Back()
    {
        Console.WriteLine("후진");
    }
}
// 현대 전용
public class Hyundai : Car
{
    public void Left()
    {
        Console.WriteLine("좌회전");
    }

    public new void Run()
    {
        Console.WriteLine("현대전진");
    }
}

// 대우 전용
public class GM : Car
{
    public void Right()
    {
        Console.WriteLine("우회전");
    }

    public override void Back()
    {
        Console.WriteLine("대우후진");
    }
}

 


/*
모든클래스들은 앞에 System.Object가 생략되어있다.
*/

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

61. ToString메서드오버라이드  (0) 2009.08.14
60. 부모의 멤버접근  (0) 2009.08.14
58. 클래스상속  (0) 2009.08.14
57. 네임스페이스(Namespace)  (0) 2009.08.14
56. 클래스복습  (0) 2009.08.14
Posted by holland14
: