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); } |
- arraylist에 넣은 데이터에 대한 컴파일시 정보가 없다. getsampleproducts함수를 만들어 리스트에 값들을 추가하고 있지만 컴파일러는 어떤값이 추가되는지 모름
- 코드에서 public 타입의 getter속성을 프로퍼티에 제공했음, 이이야기는 setter로 사용하고 싶으면 정의해주어야 한다는 이야기 이다.
- 속성과 변수들을 만들기 위해서 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); }
} |