VB.NET에 대한 Microsoft 자습서에서 사용되는이 두 단어를 들었습니다. 변수와 관련하여 사용될 때이 두 단어의 차이점은 무엇입니까?
답변
가치 기준 참조 유형
C #의 변수 는 두 그룹 중 하나에 있습니다. 값 유형 또는 참조 유형. int
및 같은 유형 DateTime
은 값 유형입니다. 반대로 생성하는 모든 클래스는 참조 유형입니다. C # 문자열도 참조 유형입니다. .NET 프레임 워크의 대부분은 참조 유형입니다.
변수의 일부
변수 이름이 있고 value 입니다. 두 부분 .
변수의 이름 은 사용자가 선언 한 것입니다. 값은 당신이 무엇을 할당하는 그것.
변수가 초기화 됨
모든 변수는 변수가 선언 되는 시점에서 항상 초기 값이 주어집니다 . 따라서 모든 변수가 초기화 됩니다.
들어 값 유형처럼 int
그렇게 명시 적으로하지 않으면 컴파일러 그들에게 올바른 가치를 제공 할 것입니다. int
의는 초기화 기본적으로 제로로, DateTime
의는 초기화 에 DateTime.MinValue
기본적으로.
참조 유형 변수 는 사용자가 제공 한 객체로 초기화 됩니다. 그렇지 않으면 컴파일러는 객체 (즉, 유효한 값)를 할당 하지 않습니다. 이 경우 값은 null
-없음입니다. 그래서 우리는 참조가 null 로 초기화 되었다고 말합니다 .
개체가 인스턴스화됩니다.
인간이 태어났습니다. 개체가 인스턴스화됩니다. 아기는이다 예를 인간의 객체는이다 예를 몇 가지 클래스의.
클래스 의 인스턴스 를 만드는 행위를 인스턴스화 (Ta-Da!)라고합니다.
따라서 다음 과 같이 선언 , 초기화 및 인스턴스화 가 함께 제공됩니다.
MyClass myClassyReference = new MyClass();
위에서 “… 객체 의 인스턴스를 생성하는 중 …”이라고 말하는 것은 잘못된 것입니다 .
편집-댓글 토론에서 영감을 얻음
별개의 용어를 사용하여 위의 세 가지 별개의 작업이 진행되고 있으며 해당 용어는 서로 바꿔서 사용할 수 없습니다.
- 참조 변수가 선언되었습니다.
MyClass myClassyReference
- 객체가 인스턴스화됩니다 (… 주어진 클래스 에서 / 내포 됨)-
new MyClass()
- 개체가 변수에 할당됩니다.
=
.
사실을 다시 말함 :
-
참조 유형 변수는 단순히 “참조”라고도합니다. “값 유형 변수”는 참조가 아닙니다.
-
이것은 “objectA는 객체의 인스턴스입니다”는 완전히 잘못되었습니다. objectA가 “objectB의 인스턴스”였다면 objectA는 objectB의 유형 (어떤 것이 든 현재 상태)으로 생명을 시작해야합니다. objectB가 변경되면 개체 D, E 및 F를 만드는 것은 어떻습니까? 아니, 아니! “objectA는 클래스의 인스턴스”라는 개념적이고 기술적 인 경우입니다. “Instantiation”및 “instance of”는 정확한 의미를 갖습니다. 객체는 클래스에서 유형, 정의 및 값을 가져옵니다.
-
MyClass myClassyReference = null
일반적으로 우리는 “변수가 null에 할당 됨”이라고 말하지 않고 “변수가 null을 참조합니다”라고 말하지 않습니다. 대신 “변수가 null입니다”라고 말합니다. 또는 “변수가 아무것도 참조하지 않습니다.”또는 “참조가 null입니다.”
실용적인 응용 프로그램:
-
나는 당신의 코드에 손가락을 대고 “이 인스턴스에는 유효하지 않은 속성이 있습니다. 이것이 루프가 실패하는 이유입니다. 인스턴스화하는 동안 매개 변수를 검증해야합니다.”라고 말합니다. (즉, 생성자 인수).
-
나는 당신의 코드에서 이것을 본다.
MyClass myClassyReference; myClassyReference.DoSomething();
“변수를 선언했지만 할당하지 않았습니다. null이므로 아무 것도 참조하지 않습니다. 이것이 메서드 호출에서 예외가 발생하는 이유입니다.”
편집 종료
참을 수없는 존재의 가벼움
기준 입력 변수의 이름과 값은 독립적으로 존재한다. 그리고 나는 독립을 의미합니다.
인스턴스 객체에 대한 참조도있을 수도 있고 없을 수도 있습니다.
인스턴스 객체는 많은 참조가있을 수 있습니다.
A는 선언 참조 수도 있고되지 않을 수도 를 가리키는 객체.
답변
변수는 값으로 초기화된다. 객체는 메모리가 그것을 위해 할당되고 그것의 생성자가 실행되었을 때 인스턴스화됩니다.
예를 들어 다음은 변수입니다.
Dim obj as Object
이 변수는 초기화 되지 않았습니다 . obj
변수에 값을 할당 하면 변수가 초기화됩니다. 다음은 초기화의 예입니다.
obj = 1
obj = "foo"
인스턴스화는 매우 다른 것이지만 인스턴스화는 일반적으로 초기화가 뒤 따르기 때문에 관련이 있습니다.
Dim obj As New Object()
앞의 코드 라인에서, obj
변수되고 초기화 새에 참조로 Object
한 것 인스턴스화 . 우리 Object
는 새 인스턴스를 만들었 기 때문에 새 인스턴스가 생성되었다고 말합니다.
이제 저는 VB.NET이 위의 코드에서 할당이 발생하고 있다는 것이 명확하지 않기 때문에 C #보다 훨씬 더 혼란스러워한다고 생각합니다. C #에서는 인스턴스의 인스턴스화와 변수의 초기화가 모두 있다는 것이 훨씬 더 분명합니다.
Object obj = new Object();
답변
무언가 를 초기화하는 것은 초기 값으로 설정하는 것입니다. 무언가 를 인스턴스화 하는 것은 인스턴스를 만드는 것입니다.
종종 이것은 다소 같은 것입니다. 이:
SqlConnection conn = new SqlConnection();
인스턴스화SqlConnection
개체를 초기화conn
인스턴스로 설정 변수.
객체의 생성자는 객체의 속성도 기본값으로 설정하기 때문에 객체를 인스턴스화하면 초기화된다고 말하는 것이 올바른 경우가 많습니다. (오해의 소지가 있습니다. 개체가 인스턴스화 한 후 초기화하기 위해 명시 적으로 호출해야하는 메서드를 노출하는 경우도 있습니다.)
답변
* Instantiation은 클래스 또는 객체에 대한 인스턴스를 생성하는 것을 의미하며, 초기화는 * 어떤 목적 으로든 동일한 객체 또는 클래스를 시작하는 것을 의미합니다. **
답변
인스턴스화 됨은 개체의 인스턴스가 생성되었음을 의미합니다. Initiated는 동일한 객체가 일부 초기화를 수행했음을 의미합니다.
답변
클래스 나 객체를 인스턴스화 할 때 새 인스턴스를 만들거나 하나를 “보유”하기 위해 메모리를 할당합니다. 해당 개체를 초기화하는 것은 인스턴스화 중에 수행되는 명령입니다.
답변
인스턴스화는 클래스의 인스턴스를 만들 때입니다. 그러면 해당 인스턴스가 개체가되고 속성을 설정하거나 메서드를 호출하여 작업을 수행 할 수 있습니다.
시작은 무언가에 대한 일련의 초기 조건을 설정하는 것입니다. 그 무언가는 객체 일 수도 있고, 스스로 시작하라고 지시하는 객체 일 수도 있고, 값을 할당하는 변수 일 수도 있습니다.
객체는 다른 것을 초기화하거나 시작의 일부로 다른 객체를 인스턴스화 할 수도 있습니다.
차이점은 인스턴스화는 무언가를 할 수있는 것의 생성이라는 것입니다. 입문은 완료되는 일입니다.