아디봉의.net

C# 속성 1.1부터 4.0까지 소스로 구분해보쟈~!! 본문

C#

C# 속성 1.1부터 4.0까지 소스로 구분해보쟈~!!

아디봉 2012. 8. 30. 22:04

 1.1 소스코드

 class Program
    {
        string name;
        public string Name { get { return name; } }

        decimal price;
        public decimal Price { get { return price; } }

        public Program(string name, decimal price)
        {
            this.name = name;
            this.price = price;
        }

        public static ArrayList GetSampleProducts()
        {
            ArrayList list = new ArrayList();
            list.Add( new Program("전남에 물폭탄 털어지붓다..", 3.4m));
            list.Add(new Program("이런저런!! ",1.1m));
            list.Add(new Program("태풍이이제 물러 가네요~",2.1m));
            return list;
        }

        public override string ToString()
        {
            return string.Format("{0},{1}",name, price);
        }

  1. arraylist에 넣은 데이터에 대한 컴파일시 정보가 없다. getsampleproducts함수를 만들어 리스트에 값들을 추가하고 있지만 컴파일러는 어떤값이 추가되는지 모름
  2. 코드에서 public 타입의 getter속성을 프로퍼티에 제공했음, 이이야기는 setter로 사용하고 싶으면 정의해주어야 한다는 이야기 이다.
  3. 속성과 변수들을 만들기 위해서 string 와 decimal 같은 번거롭고 복잡한 많은 코드들을 작성해야한다.

2.0소스코드

  class product
    {
        string name;
        public string Name //속성정의
        {
            get { return name;}
            private set { name = value; }//private setter 추가
        }
       
        decimal price;
        public decimal Price //속성정의
        {
            get { return price; }
            private set { price = value; } //private setter 추가
        }

        public product(string name , decimal price)
        {
            Name = name;
            Price = price;
        }

        public static List<product> GetSampleProducts()
        {
            List<product> list = new List<product>();
            list.Add(new product("이런", 1.1m));
            list.Add(new product("저런", 2.2m));
            list.Add(new product("그런", 3.3m));
            return list;

        }
        public override string ToString()
        {
            return string.Format("{0},{1}", name, price);
        }
    }

private setter 속성이 추가됨. 그리고 list<Priduct>타입의 리스트가 추가되었고 가장큰 특징은 컴파일러가 리스트 안에 반드시 Product타입이 할당될 수 있다는 것을 알고 있다는 것이다. 다른 타입입을 넣으려고 시도한다면 컴파일러는 에러를 반환하게 됨. 또한 결과타입을 변환해주지 않아도 사용가능하다.

3.0 소스코드

   class product1
    {
        public string Name { get; private set; }
        public decimal Price { get; private set; }
        public product1(string name , decimal price)
        {
            Name = name;
            Price = price;
        }
        product1(){}//private파라미터들이 없는 새로운 생성자 선언      //만약  이생성자를 선언해주지 않으면 product1타입의 인스턴스를 선언하는 다르코드를 밖에서 작성하지 못함.
        public static List<product1> GetSampleProducts()
        {
            return new List<product1>
            {
                new product1{Name= "West Side Story", Price= 9.99m},
                new product1{Name="www", Price= 8.88m},
                new product1{Name="qqq", Price= 7.77m},
                new product1{Name="aaa", Price=13.99m}
            };
        }
         public override string ToString()
        {
            return string.Format("{0},{1}",Name, Price);
        }

    }

 

4.0소스코드

  class product2
    {
        readonly string name;
        public string Name { get { return name; } }

        readonly decimal price;
        public decimal Price{get {return price;} }

        public product2(string name, decimal price)
        {
            this.name = name;
            this.price = price;
        }

        public static List<product2> GetSampleProduct()
        {
            return new List<product2>
            {
                new product2(name:"이런",price:9.9m),
                new product2(name:"저런",price:8.8m),
                new product2(name:"그런",price:7.7m),
                new product2(name:"요런",price:6.6m) //파라미터이름을 기록해 가독성을 상당히 향상시킴
            };
        }

        public override string ToString()
        {
            return string.Format("{0},{1}", name, price);
       }

    }