ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로퍼티 인덱서
    .NET/C# Basic 2008. 10. 15. 06:11
    반응형

    ///// 프로퍼티 /////////

    using System;

    class test
    {
     private int a;

     public int A
     {
      get
      {
       Console.Write("get");
       this.a = a+2;
       return a;
      }
      set {
       Console.WriteLine("set");
       this.a = value; }
     }
    }


    class jks
    {
     static void Main()
     {
      test t = new test();
      t.A = 2;

      Console.WriteLine("{0}",t.A);
     }
    }


    using System;

    class jksPro
    {
     private string Name;

     public string NameP
     {
      get
      {
       string newName = this.Name + "추가문장";
       Console.WriteLine("이름GET");
       return newName;
      }
      set
      {
       Console.WriteLine("SET");
       this.Name = value;
      }
      
     }
    }

     

    class MainClass
    {
     static void Main()
     {
      jksPro jks = new jksPro();

      string value = Console.ReadLine();
      Console.WriteLine("값을 입력하시요");
      jks.NameP = value;

      Console.WriteLine("{0}",jks.NameP);
     }
    }




    ///// 인덱서 ///////////

    인덱서(indexer)

    일련의 데이터 값을 가질 수 있는 데이터 구조가 필요
    사용할 데이터형을 지정하고, 클래스 자체를 배열처럼 사용하기 때문에
    this를 사용하고 [ ] 사이에 인덱스로 사용할 데이터형을 지정
    프로퍼티와 마찬가지로 get/set 메서드가 불려지며, 특정 값을 가리키는 인덱스를 지정







    예제)





    using System;
    // ArrayList 콜렉션 클래스를 다루기 위해 Collections 네임스페이스를 추가
    using System.Collections;

    // ObjList 클래스를 정의하고, 멤버로 ArrayList 클래스를 추가

    public class ObjList
    {
        protected ArrayList data; // ArrayList 객체

        public ObjList()
        {
            data = new ArrayList();
            // ArrayList 클래스는 동적으로 배열 크기를 관리하며,
            // 내부적으로 관리하는 데이터는 object 형
        }

     

     public object this[int i]
     {
    // ObjList 클래스에 다음과 같이 인덱서를 추가하고,
    // get 메서드에서 값을 리턴하며, 인덱스가 범위를 벗어나는지 검사해서 예외 처리

      get
      {
       if (i >= 0 && i < data.Count) // 인덱스 범위 검사
       {
        return data[i];
       }
       else
        throw new IndexOutOfRangeException("범위 벗어남" + i);
      }

    // set 메서드에서 값을 넣을 때도 마찬가지로 범위를 검사해서 범위 내에들어있는
    // 경우에만 값을 넣어주며, 마찬가지로 범위를 벗어나는 경우는 예외 처리
      set
      {
       if (i >= 0 && i < data.Count) // 인덱스 범위 검사
       {
        data[i] = value;
       }
       else
        if (i == data.Count) // 마지막 데이터 요소인 경우
        {
         data.Add(value); // 데이터를 추가합니다.
        }
        else
         throw new IndexOutOfRangeException("범위 벗어남" + i);
      }

     }

    }


    public class Class1
    {
     public static void Main()
     {

    // 인덱서에 여러 데이터형을 가진 값을 넣고, 값을 출력

      ObjList list = new ObjList();

      list[0] = 100;
      list[1] = "apple";
      list[2] = 123.456;

      for (int i = 0; i < 3; i++)
       Console.WriteLine("[{0}] = {1}", i, list[i]);
     }
    }


     //////////////////          간단한 쉬운 인덱스 예제~!!!!!!!!!!!!!!!!

    using System;

    class NameCard
    {
     private string[] names;

     public NameCard(int i)
     {
      names = new string[i];
     }

     public string this[int index]
     {
      get
      {
       if (names[index] == null)
        return "get값이없네 ?";
       else
        return names[index];
      }
      set
      {
       if(value == null)
        Console.WriteLine("null 값은 저장할수없습니다");
       else
        names[index] = value;
      }
     }
    }

    class MainApp
    {
     static void Main()
     {
      const int max = 5;
      NameCard my = new NameCard(max);
      my[0] = "전광식";
    //  my[1] = "찌질이";
      my[2] = "권오윤";
      my[3] = null;
      my[4] = "명건이";

      for (int i = 0; i < max; i++)
       Console.WriteLine(my[i]);
     }
    }

    ///////////////////   //Interfacs에서 property 선언 ///////////////////////////


    using System;

    interface INameCard
    {
     string Name         //Interfacs에서 property 선언
     {
      get;
      set;
     }
     
     string Telephone
     {
      get;
      set;
     } 
    }

    class NameCard : INameCard
    {
     private string name;
     private string tel;
     private static int cnt;
     
     public NameCard()
     {
      cnt++;
     }

     public string Name
     {
      get
      {
       return name;
      }
      set
      {
       name = value;
      }
     }

     public string Telephone
     {
      get { return tel; }
      set { tel = value; }
     }

     public static int Count{ get{return cnt; } }
    }

    class MainApp
    {
     public static void Main()
     {
      NameCard my = new NameCard();
      my.Name = "박상현";
      my.Telephone = "555-2424";

      Console.WriteLine("제 이름은 {0}입니다.", my.Name);
      Console.WriteLine("전화번호는 {0}예요.", my.Telephone);
      Console.WriteLine("현재 생성된 객체의 수 : {0}", NameCard.Count);
      Console.WriteLine();
      
      NameCard you = new NameCard();
      you.Name = "채진실";
      you.Telephone = "723-9292";

      Console.WriteLine("제 이름은 {0}입니다.", you.Name);
      Console.WriteLine("전화번호는 {0}예요.", you.Telephone);
      Console.WriteLine("현재 생성된 객체의 수 : {0}", NameCard.Count);
     }
    }









    반응형

    댓글

Designed by Tistory.