문제

몇 주 후에, 나는 첫해 프로그래밍 과정의 일환으로 C#의 두드러진 참조 지점을 1 학년 엔지니어들에게 가르 칠 것입니다. 그들 대부분은 이전에 프로그래밍 한 적이 없으며, 대상을 배우는 데 어려움을 겪었으므로 참고 문헌을 가르치는 것은 오르막길이 될 것입니다. 나는 학생들이 스스로 진행할 수있는 많은 예를 가질 계획이지만, 기본 개념이 '클릭'되지 않으면 많은 예를 보여주는 것만으로도 많은 예를 보여주는 것이 매우 압도적 인 경향이 있습니다.

그래서 나는 질문을 SO 커뮤니티에 내놓을 것입니다. 참조가 가르친 가장 좋은 방법은 무엇입니까? 당신을 위해 '클릭'으로 만든 이유는 무엇입니까? 내가 놓친 참조 관련 자료가 있습니까?

내 임시 수업 계획은 다음과 같습니다.

  1. 참조 란 무엇입니까 (an Eric Lippert와 같은 논쟁)
  2. 참조 및 쓰레기 수집가
  3. 참조 유형 및 값 유형
  4. 불변의 유형
  5. 기준에 따라 통과 대 가치별로 통과 (및 모든 미묘함 가치별로 전달되는 객체 참조)
  6. 1-5를 이해하지 못한다면 예상치 못한 결과를 낳는 소수의 불쾌한 예.
도움이 되었습니까?

해결책

내가 설명한 한 가지 방법은 휴대 전화 나 Walkie-Talkie를 사용하는 것입니다. 당신 (강사)은 한쪽 끝을 잡고 당신이 객체 인스턴스라고 선언합니다. 학생들은 교실 주변의 다른 쪽 끝 (즉, 스피커 폰에있는 스피커 전화)을 통과하는 동안 한 장소 (예 : 힙)에 머무 릅니다.

그들은 당신에게 "참조"를 통해 당신과 상호 작용할 수 있지만, 그들은 실제로 "당신"을 소유하고 있지 않습니다.

다른 팁

기준 유형과 값 유형의 차이점을 설명하는 URL 비유를 좋아합니다. 일부 내용에 대한 참조로 URL을 전달할 수 있습니다. 해당 컨텐츠를 수정하지 않고 해당 URL을 수정할 수 있습니다. URL을 통해 컨텐츠를 통해 콘텐츠를 수정할 수도 있습니다.

이것은 유용한 참조입니다.

 http://www.yoda.arachsys.com/csharp/parameters.html

참고 문헌을 설명하십시오 인물, 순수한 텍스트는 때때로 대부분의 사람들을 통과하지 않기 때문에. 이 주제에 관한 많은 자원과 책은 언어 의사 소통만으로 할당을 관련시키기가 어렵 기 때문에 수치를 통해 설명하려고 노력합니다 (이것은 대부분의 사람들에게 주로 관심 범위입니다).

적어도 객체가 서로 어떻게 관련되는지 지적하려고 노력하십시오. 간단한 예는 간단한 참조입니다.

주어진:

class A {
    B b = new B();
}

class B {
   int mine = 1;
}

수업을 인스턴스화 할 때 A 객체로 a 어떤 상황에서 다음 그림은 힙에서 어떻게 보이는지 보여줍니다. 그림의 요점은 다른 물체가 서로 어떻게 관련되는지 보여주고 힙 작동 방식에 대한 정신 모델을 갖는 것입니다.

         +-A-----+
a: *---->|       |
         |       |   +-B--------+
         | b: *--+-->|          |
         |       |   | mine: 1  |
         +-------+   |          |
                     +----------+

또한 힙과 스택 할당의 차이점을 설명하십시오. 매개 변수로 메소드를 호출합니다. 간단한 예는 다음과 같은 것입니다.

다음 방법이 주어지면 :

public void doSomething(B b) {
   int doMine = b.mine + 1;
}

전화 할 때 doSomething 그리고 결국 그 일을하게 해 doSomething스택 스택은 아래와 같은 것 같습니다. 객체가 스택 내부에 직접 상주하지 않는다는 점을 보여주는 점은 힙의 객체를 참조하며 물체는 참조를 통해 공유됩니다.

whoever called doSomething *
                           |
                           v
+-doSomething-+   +-B--------+
| b: *--------+-->|          |
|-------------|   | mine: 1  |
| doMine: 2   |   +----------+
+-------------+

또 다른 예시 예제는 객체 인 배열을 보여주고 다차원 배열에는 배열 배열이 포함되어 있습니다.

나는 찾았다 이 기사 C#에서 전달되는 매개 변수를 설명하는 데 정말 유용합니다. 이 기사는 또한 일반적으로 가치와 참조 유형을 설명하는 좋은 작업을 수행합니다.

그것은 나에게 많은 도움이되는 시각적 표현에 가깝습니다.

그림과 다이어그램.

사람들은 그들이 배우고있는 개념의 정신적 이미지와 시각적 표현을 형성합니다. 참조 그리고 그들의 관련성과의 관계 사물 시작하는 좋은 방법입니다. 마찬가지로, 시각화 물체 멤버를 포함하여 변수 (다른 개체에 대한 참조 포함) 및 회원 행동 양식, LA UML 다이어그램은 매우 도움이됩니다.

나중에 필요하다고 생각되면 참조 및 원시 유형이 실제로 구현되는 방법에 대한 세부 사항을 탐구 할 수 있습니다. 그러나 사람들이 추상적 개념을 표현 세부 사항에 짝을 이루는 데있어 사람들이 추상적 인 개념을 배우는 데 방해가되는 표현 세부 사항에 얽매이면서 가능한 한 오랫동안 이러한 토론을 지연시킵니다.

내가 vb6을 배우고있을 때, 참고 문헌은 실제로 나를 약간 혼란스럽게했다. 그런 다음 C ++ 학습을 시도했고 포인터를 다루고 나서 참고 문헌이 완벽하게 이해되었습니다. what-is-ace-actally happening 관점에서 그것을 이해하는 것이 oo-concepts 관점에서 그것을 이해하는 것보다 더 쉬웠습니다. 어쩌면 당신은 당신의 수업에서 아래에있는 것들을 넘어갈 수 있습니다.

.NET에서 사용되는 두 가지 매우 다른 두 가지, 즉 클래스 타입 저장 위치의 내용과 "Ref"예선과 함께 전달되는 매개 변수를 참조하기 위해 사용될 수 있기 때문에, "참조"용어의 사용을 최소화하는 것이 좋습니다. 전자의 경우 "객체 참조"라는 용어를 사용하고 후자의 경우 "Ref 매개 변수"를 사용하십시오.

"객체 참조"가 무엇인지 설명 할 때 "객체 ID"라는 용어를 사용하는 것이 좋습니다. Object ID는 "주소"와 다르게 만드는 몇 가지 사항이 있습니다.

  1. 객체 ID로 많은 일을 할 수 없습니다. 하나는 공백 여부를 테스트하거나, 그 중 두 개가 동일인지 확인하거나, 적합한 유형의 저장 위치에 하나를 복사하거나, 하나가 언급 한 객체를 찾아서 무언가를하도록 요청할 수 있습니다. 클래스 타입 값 또는 변수로 무언가를 수행하라는 대부분의 요청은 실제로 추천 대상으로 무언가를하도록 요청합니다. 주소로 할 수있는 것처럼 다른 객체의 ID를 다른 객체의 ID를 조작 할 수 없습니다.
  2. 시스템은 객체 ID를 주소로 변환 할 수있는 수단이 있어야하지만 특정 수단을 사용한다는 보장은 없습니다. 객체 ID와 관련된 비트 패턴이 자발적으로 변경되지 않는다는 보장도 없습니다. 보장되는 것은 비트 패턴이 변경되면 새 패턴이 이전과 동일한 대상을 지칭한다는 것입니다.
  3. 시스템은 객체 ID가 저장되는 모든 장소를 추적합니다. 객체 ID의 사본이 존재하는 한 해당 객체 ID는 생성 된 객체 인스턴스 이외의 다른 것을 결코 언급하지 않습니다. 대조적으로, 일반적으로 사물에 주소를 사용하는 시스템은 주소가 복사 될 수있는 모든 장소를 추적하지는 않습니다. 누군가가 여전히 주소의 사본을 가지고있는 동안 객체가 존재하지 않을 수 있으며 일부 새로운 객체가 동일한 주소로 생성 될 수 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top