어제에 이은 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]); } } }
'프로그래밍 > 조각코드' 카테고리의 다른 글
[WPF] 랜더타겟 이미지 스케일링 조정시(확대시) 깔끔히 나오는게!? (0) | 2012.05.29 |
---|---|
[C# WPF] File Drag&Drop / 이미지 표시 / 부분 읽어오기. (0) | 2012.05.10 |
[C#] 위임과 상속 연습코드~ (0) | 2012.05.03 |
[C#] 해당 경로에 있는 파일목록 출력.. (0) | 2012.05.03 |
[C#] 위임이란? (0) | 2012.05.03 |