인덱스 , 상속 정리 ( 1 ) 인덱스 예제 namespace 인덱스 를 _ 이용한 구구단 { class GuGu {/// < summary >/// 인덱스 를 이용 해서 구구단 의 실행 영역 을 구성 . /// 1 . 제 어 구문 이 들 어 갈 수 있 다 / / / 2 . 연산 을 구문 이 들 어 갈 수 있 다 . /// </ summary > private int StrartVal , EndVal ; public GuGu ( int val 1 , int val 2 ) { VALUE 1 = val 1 ; VALUE 2 = val 2 ; } / / 생성자 / // < summary >/// 프로 퍼티 를 이용 / // </ summary > public int VALUE 1 { get { return StrartVal ; } set { StrartVal = value ; }} public int VALUE 2 { get { return EndVal ; } set { EndVal = value ; }}/// < summary >/// 객체 를 마치 배열 인 것 처럼 사용 할 수 있 도록 하 는 메 서 드이 다 . 인 덱 서 를 사용 하 면 첨자 로 / / / 원 하 는 값 을 편리 하 게 액세스 할 수 있 다 . / / / 인덱스 의 이름 명이 this 로 고정 되 어 있 으며 액세스 대상 인 첨자 를 [ ] 괄호 안 에 인수 로 전달 받 는다 . ////// 인덱스 는 참조 용 ( ref ) , 출력 용 ( out ) 인수 는 전달 받 을 수 없 다 . /// </ summary > public int this [ int StrartVal , int EndVal ] { get { return ( StrartVal * EndVal ) ; }}} class Program {/// < summary >/// 구구단 입력 클래스 / // </ summary > static void Main ( string [ ] args ) { int startVal , EndValue ; Console . Write ( " 시작 단 : "); startVal = int . Parse ( Console . ReadLine ( ) ) ; Console . Write ( " 종료 단 : "); EndValue = int . Parse ( Console . ReadLine ( ) ) ; GuGu g = new GuGu ( startVal , EndValue ) ; / / 클래스 접근 방법 for ( int i = startVal ; i <= EndValue ; i ++){ Console . WriteLine ( "{ 0 , 5 }", i + " 단 "); Console . WriteLine ( "======="); for ( int j = 1 ; j <= 9 ; j ++){ Console . WriteLine ( i + " X " + j + "= { 0 }", g [ i , j ] ) ;} Console . WriteLine ( ) ;}}}}( 2 ) 상속 예 제상 속 - 이미 만들 어 진 클래스 의 멤버 들 을 물려 받 아 새로운 클래스 를 정의 하 는 기법 기반 클래스 ( Base Class ) - 기존 에 존재 하 는 클래스 파생 클 래서 ( Derived Class ) - 상 속 에 의해 새로 만들 어 진 클래스 ※ 상속 의 원친 ( 1 ) . 구조 체 는 상속 의 대상 이 아니 다 . 구 조체 에서 새로운 구조 체 를 파생 시킬 수 없 다 . 구 조체 를 기반 클래스 로 도 지정 할 수 없 다 . ( 2 ) . 모든 클래스 는 단 하난 의 기반 클래스 만 을 가질 수 있 다 . ( 3 ) . 한 클래스 로 부터 파생 된 클래스 의 개수 에 는 제한 이 없 다 . ( 4 ) . 파생 의 깊이 에 는 제한 이 없 다 . ( 5 ) . 클래스 끼리 의 상호 파생 은 안 된다 . namespace 상속 {/// < summary >/// 이미 만드 어 진 클래스 의 멤버 들 을 물려받 아 새로운 클래스 를 저 의 하 는 기법 이 다 . / / / 기존 의 존재 하 느 클래스 : 기반 클래스 ( Base Class ) / / / 새로 만들 어 진 클래스 : 파생 클래스 ( Derived Class ) / // </ summary > class Inheritance { static void Main ( string [ ] args ) { Student a = new Student ( " hoonZzag ", 42 , 1000 ) ; a . Intro ( ) ; a . Study ( ) ;// a . Human _ Output ( ) ; / / 메 서드 형식 으로 Student 클래스 를 불렀 기 때문 에 protecded 에서 는 접근 이 안 됨 . Others Os = new Others ( " 원 짱 ", 42 , 98201083 , " 전산 ");}} class Human {/// < summary >/// protected 에서 접근 지정 자 가 private 이 라면 파생 클래스 에선 는 접근 이 할 수 없 다 . /// human 이 부모 클래스 / // </ summary > protected string Name ; / / 자식 클래스 , 파생 클래스 에서 도 접근 이 가능 하 면 자식 클래스 에서 protected int Age ; / / 부모 클래스 의 변수 를 사용 이 가능 하 다 . / / 생성자 public Human ( string aName , int aAge ) { Name = aName ; Age = aAge ;}// 자식 클래스 가 상속 받 아서 override ( 기능 수정 및 추가 ) 를 허용 키 위해 virtual 키워드 지정 public virtual void Intro ( ) { Console . WriteLine ( " 이름 : { 0 }", Name ) ; Console . WriteLine ( " 나이 : { 0 }", Age ) ;} public void Human _ Output ( ) { string str = " * * * * * * ************************\ n "; str += "* Human Class 입니다 . *\ n "; str += " * * * * * * * ***********************"; Console . WriteLine ( str ) ;}} / // < summary >/// 1 . 멤버 를 추가 하 기 만 하 는 것 이 아니 라 기반 클래스 로부터 상속 받 은 동작 을 수정 할 수 있 다 . /// / / / 2 . 파생 클래스 형식 / / / 지정 자 class c _ Name : 기반 클래스 , 인터페이스 / / / class Student : Human / / / 3 . 구조 체 는 상속 이 되 지 않 는다 . 원칙 적 으로 기반 클래스 는 1 나 만 가능 하 다 . 그러나 깊이 는 제한 이 없 다 . /// </ summary > class Student : Human / / student 는 Human 의 모든 멤버 를 상속 받 는다 . { protected int StNum ;// 자식 클래스 의 생성자 public Student ( string aName , int aAge , int aStNum ) : base ( aName , aAge ) / / human 의 생성자 를 초기 화 시킨 다음 에 student 초기 화 한다 . { StNum = aStNum ;}// 부모 클래스 로 부 터 상속 받 은 Intro ( ) 를 기능 추가 하 기 위해 override 키워드 사용 ( 단 부모 클래스 에서 / / 해당 메 서 드 에 대해 vitual 키워드 를 지정 해 줘야 합니다 . public override void Intro ( ) { base . Intro ( ) ; Console . WriteLine ( " 학번 : { 0 }", StNum ) ;} public void Study ( ) { Console . WriteLine ( " 자식 클래스 의 Study ( ) 입니다 . "); base . Human _ Output ( ) ;}} class Graduate : Student { protected string Major ; public Graduate ( string aName , int aAge , int aStNum , string aMajor ) / / student 에서 상속 을 받 은 것 이 여서 최소한 3 개 의 : base ( aName , aAge , aStNum ) / / 값 을 가지 고 있 어야 한다 . { / / Major = aMajor ; / / Graduate 자체 적 으로 사용 하 기 위한 변수 } public void WriteThesis ( ) { Console . WriteLine ( " 누가 해서 조 부탁 합니다 . ");}} class Others : Graduate {/// < summary >/// 파생 클래스 에서 부모 클래스 의 변수 이용 가능 한 것 을 보여 주 고 있 다 . /// </ summary > public Others ( string aName , int aAge , int aStNum , string aMajor ) : base ( aName , aAge , aStNum , aMajor ) / / 변수 의 초기 화 는 상속 을 받 은 순서 대로 최상위 클래스 를 머 저 초기 화 한 후 { / / 자식 클래스 , 파생 클래스 순 으로 초기 화 를 한다 . Console . WriteLine ( " 성명 : { 0 }", base . Name ) ; / / Human 클래스 Console . WriteLine ( " 나이 : { 0 }", base . Age ) ; / / Human 클래스 Console . WriteLine ( " 학번 : { 0 }", base . StNum ) ; / / Student 클래스 Console . WriteLine ( " 전공 : { 0 }", base . Major ) ; / / Graduate 클래스 }}} 저작 자표 시비 영리 동일 조건