2014-04-03 8 views
0
  1. 많은 양의 정적 객체를 초기화 할 때 속도가 향상됩니까?
  2. 컴파일 타임이나 다른 종류의 이점이 있습니까?

예컨대 :C# 개체/목록 이니셜 라이저 구문의 장점은 무엇입니까?

IList<object> objects = new List<object>(); 
objects.Add(new object()); 
objects.Add(new object()); 
objects.Add(new object()); 
+4

1 - 더 읽기 쉽고 보일러가 적게 늘어나는 구문입니다. 2 -'new object()'는 의미가 없습니다. 3 -'IList objects = new List ();'과 같은 코드를 두 번 입력하는 대신'var'을 사용하십시오. C#은 자바가 아닙니다. 4 - 아니 런타임 혜택을 제공하지 않습니다. 그것은 같은 일리노이로 컴파일합니다. –

+0

코드의 모든 개체에 var를 사용하지 않으면 컴파일 시간이 오래 걸릴 수 있습니까? :) IDictionary ....과 같은 큰 이름을 가진 객체에 대해서는 절대로 사용하지 않는 법을 배웠습니다. –

+3

아니요. 형식을 잘못 입력하는 것은 컴파일러에게는 쉬운 일이 아닙니다. @HighCore 당신이 대답 대신 대답으로 써야한다고 생각합니다. –

답변

2

코드의 두 조각 사이에 실행 시간 차이가 없습니다 : 대

IList<object> objects = new List<object> 
{ 
    new object(), 
    new object(), 
    new object() 
}; 

. 둘 다 같은 일리노이로 컴파일됩니다.

이니셜 라이저 구문의 기본 이점은 기본적으로 여러 명령문에 반대되는 단일 식의 목록을 초기화한다는 것입니다. 예를 들어, 사용자가 명시 적으로 임시 변수를 만들지 않고하는 방법에서 목록을 반환하는 데 사용할 수 (컴파일러는 일시적이 당신을 위해 생성) :

public List<T> MakeListOf3<T>(T val) 
{ 
    return new List<T> { val, val, val }; 
} 

반대로 :

public List<T> MakeListOf3<T>(T val) 
{ 
    var list = new List<T>(); 
    list.Add(val); 
    list.Add(val); 
    list.Add(val); 
    return list; 
} 

꽤 있다고 고작했지만 아이디어를 얻었습니다.

1

기본적으로 구문 설탕이며 개인적인 취향과 미학의 문제입니다.

또한 컬렉션 초기화 프로그램과 개체 초기화 프로그램을 결합 할 수도 있습니다. 매우 복잡한 구조를 한 번 실행하면됩니다. 예 :

Product product = new Product 
{ 
    Name = "Dog food", 
    Price = 9.95, 
    Manufacturer = 
    { 
     Name = "Dog food producer" 
     Location = "Some location" 
    }, 
    SimilarProducts = 
    { 
     new Product { Name = "Cat food" }, 
     new Product { Name = "Bird food", Price = 5.50}, 
     new Product 
     { 
      Name = "Guinea Pig food", 
      Price = 5.50 
      SimilarProducts = 
      { 
       new Product { Name = "Guinea Pig shampoo" }, 
       new Product { Name = "Guinea Pig toofpaste" } 
      }, 
     }, 
    }, 
}