프로그래밍/조각코드
[C#] 추상메소드, 인터페이스, 보호클래스(상속불가) 기타등등..
ngcbbs
2012. 5. 4. 12:50
어제에 이은 C# 공부중 예제들~ 추상메소드, 인터페이스, 보호클래스(상속불가), 모든 클래스들은 c#에 의해서 System.Object 를 상속, 프로퍼티(별칭 프로퍼티를 통해 데이터에 접근할 수 있도록 하는것 읽기/쓰기 제어), 인덱서(객체 자체에 [] 연산자를 지정해 해당 데이터에 접근할 수 있도록하는것. 대략 읽기만 가능?)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
* 추상 메소드! 그리고 인터페이스.
*/
namespace test3
{
// 추상메소드 : 파생되는 클레스에 특정 메소드를 만들도록 강요할 수 있음.
abstract class Animal
{
abstract public void Walk();
}
class Person : Animal
{
public override void Walk()
{
System.Console.WriteLine("사람 걷다.");
}
}
class Robot : Animal
{
override public void Walk() // override 키워드의 순서가 참 거슬렸었음. 이렇게도 되나?(된다)
{
System.Console.WriteLine("로봇 걷다.");
}
}
// 인터페이스 : 클래스는 다중상속 불가. 인터페이스를 통해 1개이상 상속이 가능하다고 함.
interface IAnimal
{
void Walk();
}
interface IUserSkill
{
void Dance();
}
class Person2 : IAnimal, IUserSkill // 1개 이상이라고 하는게 요런걸 말하는건가!?
{
public void Walk()
{
System.Console.WriteLine("사람2 걷다.");
}
public void Dance()
{
System.Console.WriteLine("사람2 춤춘다.");
}
}
class Person3 : IAnimal
{
public void Walk()
{
System.Console.WriteLine("사람3 걷다.");
}
}
// 보호클래스 : sealed 키워드가 적용되면 어떤 클래스도 SealAnimal 을 상송받을 수 없다고 하네요.
sealed class SealAnimal
{
public string Name;
public void Walk()
{
System.Console.WriteLine("보호된(?!) 동물 클래스 걷다.");
}
}
// 모든 c# 의 클래스는 System.Object 클래스를 상속 받는다.
// System.Object 의 주요 메소드.
// > Equals() : 객체가 같은지 판단.
// > GetHashCode() : 고유 해시 반환.
// > GetType() : 타입 반환.
// > ToString() : 객체 문자열 반환.
// > Finalize() : 객체 소멸전에 작업할 코드 수행.
// > MemberwiseClone() : 객체의 복사본을 만듬.
// 프로퍼티 : 이를 통해서 클래스의 멤버변수에 대해서 읽기/쓰기 속성을 지정할 수 있다.
// 멤버 변수가 private 로 선언되었을지라도..
class Ayo
{
private int nData;
private ArrayList aData = new ArrayList();
public void push_back(int value)
{
aData.Add(value);
}
public int Data // 이게 프로퍼티라고 한다. 음... 뭔가 타이핑이 더 많아 진거 같기도 하고 생략된거 같기도 하다.
{
get { return nData; }
set { nData = value; }
}
// 인덱서 aData[0] 이런식이 된다는것인듯! 좋아 보이긴 한다.
public int this[int index]
{
get { return (int)aData[index]; }
}
}
class Program
{
static void Main(string[] args)
{
// 추상메소드 테스트
Person p = new Person();
Robot r = new Robot();
p.Walk();
r.Walk();
// 인터페이스 테스트
Person2 p2 = new Person2();
Person3 p3 = new Person3();
p2.Walk();
p3.Walk();
p2.Dance();
// 배열!
Person3[] p3array = new Person3[2];
p3array[0] = p3;
p3array[1] = new Person3();
for (int i = 0; i < 2; ++i)
{
p3array[i].Walk();
}
foreach (Person3 it in p3array) // 익숙해져 보자!~
{
it.Walk();
}
Ayo aa2 = new Ayo(); // 항상 생성해 줘야하는건 C/C++ 에 비해서 성가신거 같다. 아직까진...
aa2.Data = 32;
System.Console.WriteLine("nData 의 값은? " + aa2.Data);
aa2.push_back(10);
aa2.push_back(15);
aa2.push_back(20);
System.Console.WriteLine("0 = " + aa2[0]);
System.Console.WriteLine("1 = " + aa2[1]);
System.Console.WriteLine("2 = " + aa2[2]);
}
}
}