일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- FastAPI
- array
- check_password
- tkinter Radio 동적버튼
- for loop
- flask
- graphene-django
- python
- Django-allauth
- numpy
- GraphQL
- Django
- allauth
- SQL
- Today
- Total
객
[C#] 인덱스 , 상속 정리 본문
인덱스 , 상속 정리
(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 |