비 유적으로 C #은 기본적으로 펜치와 조절 가능한 렌치를 피해야한다는 것을 누군가가 읽은 조절 도구와 비슷하므로 조절 가능한 렌치가 전혀 포함되어 있지 않으며 펜치는 "안전하지 않은"이라고 표시된 특수 서랍에 잠겨 있습니다. , 고용주가 건강에 대한 책임을지지 않는 면책 조항에 서명 한 후 감독자의 승인을 받아야만 사용할 수 있습니다.
C ++에는 조절 가능한 렌치와 펜치뿐만 아니라 목적이 분명하지 않은 홀수 볼 특수 목적 도구가 포함되어 있으며 올바른 고정 방법을 모르면 쉽게 절단 할 수 있습니다. thumb (하지만 사용 방법을 이해하면 C # 도구 상자의 기본 도구로는 불가능한 작업을 수행 할 수 있음). 또한 선반, 밀링 머신, 표면 그라인더, 금속 절단 띠톱 등을 사용하여 필요할 때마다 완전히 새로운 도구를 설계하고 만들 수 있습니다 (그러나 기계공의 도구는 자신이하고있는 일을 모르거나 부주의 한 경우에도 심각한 부상을 입을 수 있습니다.
이는 철학의 기본 차이점을 반영합니다. C ++은 기본적으로 원하는 디자인에 필요한 모든 도구를 제공하려고합니다. 이 도구를 사용하는 방법을 거의 제어하지 않으므로 드문 상황에서만 잘 작동하는 디자인과 어설픈 아이디어 일뿐 아니라 아무도 모르는 상황을 디자인하는 데 쉽게 사용할 수 있습니다. 그들은 잘 작동 할 것 같습니다. 특히, 실제로는 거의 항상 결합 된 결정을 포함하여 설계 결정을 분리하여 많은 부분을 수행합니다. 결과적으로 C ++ 만 작성하는 것과 C ++을 잘 작성하는 것에는 큰 차이가 있습니다. C ++을 잘 작성하려면 많은 숙어와 경험 법칙을 알아야합니다 (다른 경험 법칙을 어기 전에 얼마나 심각하게 생각해야하는지에 대한 경험 법칙 포함). 결과적으로 C ++는 배우기 쉬움보다 전문가가 사용하기 쉬워졌습니다. 또한 너무 사용하기 어려운 환경도 있습니다.
C # (또는 적어도 힘을 시도하는 더 많은 않습니다 매우 강력하게 제안) 언어 디자이너는 좋은 디자인 관행을 고려 것을. C ++에서 분리 된 (그러나 일반적으로 실제로 함께 사용되는) 상당히 많은 것들이 C #에서 직접 연결됩니다. 그것은 "안전하지 않은"코드가 경계를 약간 밀어 낼 수있게 해주지 만, 정직하게는 전체가 아닙니다.
결과적으로 C #으로 표현하기에는 상당히 어색한 C ++로 직접 표현할 수있는 디자인이 꽤 있습니다. 반면에 C #을 배우는 것이 훨씬 쉬우 며 상황에 따라 작동하지 않는 정말 끔찍한 디자인을 만들 가능성이 크게 줄어 듭니다. 대부분의 경우 (아마도 대부분의 경우) 간단히 "흐름에 따라 이동"하여 견고하고 실행 가능한 디자인을 얻을 수 있습니다. 또는 내 친구 중 하나 (적어도 나는 그를 친구로 생각하고 싶습니다-정말로 동의하는지 확실하지 않음)가 그것을 좋아하는 것처럼 C #을 사용하면 성공의 구덩이에 빠지기 쉽습니다.
따라서 두 언어로 된 방법 class
과 방법에 대한 질문을 좀 더 구체적으로 살펴보면 struct
상속 계층 구조에서 생성 된 객체를 사용하여 기본 클래스 / 인터페이스의 형태로 파생 클래스의 객체를 사용할 수 있습니다. 구체적인 수준에서 일반적으로 일종의 포인터 또는 참조를 통해 그렇게해야한다는 사실에 붙어 있습니다. 파생 클래스의 객체에는 기본 클래스 / 인스턴스의 인스턴스로 처리 할 수있는 메모리가 포함되어 있습니다. 인터페이스, 파생 된 개체는 해당 메모리 부분의 주소를 통해 조작됩니다.
C ++에서 올바르게 수행하는 것은 프로그래머의 몫입니다. 상속을 사용하는 경우 (예를 들어) 계층 구조에서 다형성 클래스와 작동하는 함수가 포인터 또는 기본에 대한 참조를 통해 그렇게하는지 확인해야합니다. 수업.
C #에서 유형간에 근본적으로 동일한 구분은 훨씬 더 명확하며 언어 자체에 의해 시행됩니다. 프로그래머는 참조로 클래스의 인스턴스를 전달하기 위해 어떤 단계를 수행 할 필요가 없습니다. 기본적으로 발생하기 때문입니다.
struct
s가 항상 스택에 저장되는 것은 아닙니다.struct
필드가 있는 객체를 고려하십시오 . 메이슨 휠러가 언급했듯이 슬라이싱 문제가 아마도 가장 큰 이유 일 것입니다.