ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] 추상메소드, 인터페이스, 보호클래스(상속불가) 기타등등..
    프로그래밍/조각코드 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]);
            }
        }
    }
    
Designed by Tistory.