2014-09-23 2 views
6

http://msdn.microsoft.com/en-US/library/0fss9skc(v=vs.120).aspx에 따르면 속성은 배열을 반환하지 않습니다. 이것은 generics와 어떻게 상호 작용합니까? 배열이 제네릭에 대해 허용되는 유형 인 경우 T Value { get; set; } 대신 T GetValue()SetValue(T value)과 같은 함수를 만들어야합니까?배열을 반환 할 수있는 일반 속성이 있습니까?

+3

얻을 수있는 방법을 만들기/정말 규칙에 대한 추론에 설명 된 효과를 완화하기 위해 아무것도하지 않는 값을 설정합니다. – Servy

+0

이 문제에 대해서는 절대로 생각하지 않았습니다. 내부 컬렉션을 추가하거나 제거하지 않으려 고 할 때 항상 배열을 반환했습니다. 어쩌면 ReadOnlyCollection을 사용해야 할 것입니다. – TyCobb

+0

@Servy : 사실이지만 대부분의 프로그래머는 루프에서 GetValueT() [x]와 같은 구문을 사용하기 전에 조금 생각합니다. – RobinHood70

답변

10

이 규칙은 절대적인 것이 아닙니다. 그것이 어디서 왔는지 이해 : 배열을 반환하는 속성은 호출자가 사본을 변경하고 객체 내부 상태에 도달 할 수 없도록 실제로 사본을 만들어야합니다.

일반적인 코드를 다루는 경우 구체적인 코드 T에 대해 알지 못합니다. 그것은 그것의 내부 구조에 의존하지 않습니다. 따라서이 규칙을 지키는 것은 도움이되지 않습니다. 배열을 제네릭 코드 안팎으로 전달하는 것은 전적으로 허용됩니다. 예 : A List<int[]>.

그 외에도 Servy는 값을 가져 오거나 설정하는 메서드를 만드는 것이 규칙에 대한 추론에서 설명한 효과를 완화하기 위해 실제로 어떤 작업도 수행하지 않는다고 올바르게 지적합니다.

관련 문제