배열 메소드가 배열 인스턴스에 내장되지 않은 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1038406

  •  10-07-2019
  •  | 
  •  

문제

어리석은 질문에 대해 미안하지만 나를 괴롭히는 것 ...

int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();

char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();
도움이 되었습니까?

해결책

답변을 제공하는 이러한 다른 질문을 식별 한 Pedro D 'Aquino에게 감사드립니다.

기본 요점은 구조의 인스턴스 메소드가 스레드 안전이 아니라 정적 메소드라는 것입니다.

이 질문보기 :

다른 팁

이것들은 공익사업 이 클래스에 속할 필요가없는 방법. 이것은 강화됩니다 단일 책임 원칙

(편집) 나는 Java와 혼란 스러웠다

(정적 멤버에 대해):

정적 클래스 멤버는 객체 아이덴티티와 무관 한 데이터와 동작을 분리하는 데 사용될 수 있습니다. 데이터와 함수는 객체에 어떤 일이 발생하는지에 관계없이 변경되지 않습니다. 수업에 객체 아이덴티티에 의존하는 데이터 나 동작이 없을 때 정적 클래스를 사용할 수 있습니다.

그만큼 스레드 안전 관점 또한 좋은 이유입니다.

확장 방법을 사용하여 .NET 3.0을 사용하는 경우 직접 수행 할 수 있습니다.

public static class Extensions
{
public static bool IsLetter(this chr)
{
 return char.IsLetter(chr);
}
}

그런 다음 : C.isletter ()

또는 원하는 방식으로 수행하십시오. 정렬에서 동일합니다

구현 결정입니다. 나는 모든 것이 프레임 워크 디자이너의 헤드를 통해 무슨 일이 있었는지 모르겠지만, 한 가지 이유는 최소한의 노력으로 사용자 정의 유형 배열을 정렬 할 수 있도록하는 것입니다.

Icompayable을 구현하는 모든 클래스는 배열에 넣고 정렬 할 수 있습니다. 배열의 메소드라면 사용자 정의 유형에 새 배열 유형을 작성해야합니다.

또한 다른 사람들이 언급했듯이 원시 유형은 배열의 디자인이 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top