[C#] 인덱스 , 상속 정리 본문

[PL]/C# & WPF

[C#] 인덱스 , 상속 정리

객과 함께. 2011. 6. 16. 22:46

인덱스 , 상속 정리

(1) 인덱스 예제

namespace 인덱스를_이용한구구단
{
class GuGu
{
/// <summary>
/// 인덱스를 이용해서 구구단의 실행영역을 구성.
/// 1. 제어 구문이 들어 갈수 있다
/// 2. 연산을 구문이 들어 갈수 있다.
/// </summary>

private int StrartVal, EndVal;

public GuGu(int val1, int val2) { VALUE1 = val1; VALUE2 = val2; } //생성자

/// <summary>
/// 프로퍼티를 이용
/// </summary>

public int VALUE1
{
get { return StrartVal; }
set { StrartVal = value; }
}

public int VALUE2
{
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클래스
}
}


}

'[PL] > C# & WPF' 카테고리의 다른 글

프로퍼티(Property)  (0) 2011.07.22
[c#.net] Request 객체와 Response객체   (0) 2011.07.19
[C#] 연산자 오버로딩 , 프로퍼티 예제  (0) 2011.06.16
참조 , 값   (0) 2011.06.08
[교육원] 변수 ,구조체 및 배열 정리  (0) 2011.06.08