[C#] default (object)는 무엇입니까? C #에서합니까?

인터넷 검색은 키워드 만 나오지만 코드가 우연히 발견되었습니다.

MyVariable = default(MyObject);

그게 무슨 뜻인지 궁금합니다.



답변

  • 참조 형의 경우 null
  • 이외의 값 유형 Nullable<T>의 경우 0으로 초기화 된 값을 반환합니다.
  • 들어 Nullable<T>는 빈 (의사 NULL) 값을 반환합니다 (실제로, 이것은 첫 번째 글 머리 기호의 재 진술이지만, 명시 적으로 그것을 만드는 가치가있다)

가장 많이 사용되는 default(T)것은 제네릭과 Try...패턴 과 같은 것 입니다.

bool TryGetValue(out T value) {
    if(NoDataIsAvailable) {
        value = default(T); // because I have to set it to *something*
        return false;
    }
    value = GetData();
    return true;
}

그것이 일어날 때, 나는 또한 필드 / 변수를 초기화하는 것이 고통스러운 일부 코드 생성에서도 사용하지만 유형을 알고 있다면 :

bool someField = default(bool);
int someOtherField = default(int)
global::My.Namespace.SomeType another = default(global::My.Namespace.SomeType);


답변

default키워드는 null참조 유형과 zero숫자 값 유형을 반환 합니다 .

들면 structS, 그 구조체의 각각의 부재들이 값 또는 참조 타입인지에 따라 제로 또는 null 초기화 반환한다.

MSDN에서

Simple Sample code :<br>
    class Foo
    {
        public string Bar { get; set; }
    }

    struct Bar
    {
        public int FooBar { get; set; }
        public Foo BarFoo { get; set; }
    }

    public class AddPrinterConnection
    {
        public static void Main()
        {

            int n = default(int);
            Foo f = default(Foo);
            Bar b = default(Bar);

            Console.WriteLine(n);

            if (f == null) Console.WriteLine("f is null");

            Console.WriteLine("b.FooBar = {0}",b.FooBar);

            if (b.BarFoo == null) Console.WriteLine("b.BarFoo is null");

        }
    }

산출:

0
f is null
b.FooBar = 0
b.BarFoo is null


답변

기본값은 MyObject입니다. 일반 코드 (C # 프로그래밍 가이드) (MSDN)의 기본 키워드를 참조하십시오 .

일반 클래스와 메소드에서 발생하는 한 가지 문제는 다음을 미리 알지 못하는 경우 매개 변수화 된 유형 T에 기본값을 지정하는 방법입니다.

  • T가 참조 유형인지 또는 값 유형인지 여부
  • T가 값 유형 인 경우 숫자 값 또는 구조 체인지 여부입니다.

매개 변수화 된 유형 T의 변수 t가 주어지면, t = 널 명령문은 T가 참조 유형 인 경우에만 유효하고 t = 0은 숫자 값 유형에 대해서만 작동하지만 구조체에는 작동하지 않습니다. 해결책은 기본 키워드를 사용하는 것입니다.이 키워드는 참조 유형의 경우 null을, 숫자 값 유형의 경우 0을 반환합니다. 구조체의 경우 구조체의 값 또는 참조 유형에 따라 0 또는 null로 초기화 된 구조체의 각 멤버를 반환합니다. GenericList 클래스의 다음 예제는 기본 키워드를 사용하는 방법을 보여줍니다. 자세한 내용은 제네릭 개요를 참조하십시오.

public class GenericList<T>
{
    private class Node
    {
        //...

        public Node Next;
        public T Data;
    }

    private Node head;

    //...

    public T GetNext()
    {
        T temp = default(T);

        Node current = head;
        if (current != null)
        {
            temp = current.Data;
            current = current.Next;
        }
        return temp;
    }
}


답변

type 매개 변수의 기본값을 지정합니다.이 값은 참조 유형의 경우 null이고 값 유형의 경우 0입니다.

기본 참조


답변

default키워드 반환 요청 된 유형의 변수에 대한 “기본”또는 “빈”값.

(정의 모든 참조 유형 class, delegate등)이다 null. (정의 값 유형 struct, enum등)는 (예컨대, 모두 제로 값이다 int 0, DateTime 0001-01-01 00:00:00등).

null값 유형 변수에 할당 할 수 없기 때문에 참조 및 값 유형 모두에 적용 할 수있는 일반 코드와 함께 주로 사용됩니다 .


답변

객체의 기본값을 변수로 설정합니다 : 참조 유형의 경우 null, 값 유형의 경우 0


답변

아마도 이것은 당신에게 도움이 될 것입니다 :

using System;
using System.Collections.Generic;
namespace Wrox.ProCSharp.Generics
{
    public class DocumentManager < T >
    {
        private readonly Queue < T > documentQueue = new Queue < T > ();
        public void AddDocument(T doc)
        {
            lock (this)
            {
                documentQueue.Enqueue(doc);
            }
        }

        public bool IsDocumentAvailable
        {
            get { return documentQueue.Count > 0; }
        }
    }
}

제네릭 형식에는 null을 할당 할 수 없습니다. 그 이유는 제네릭 형식을 값 형식으로 인스턴스화 할 수 있고 참조 형식에서만 null이 허용되기 때문입니다. 이 문제를 피하기 위해 기본 키워드를 사용할 수 있습니다. 기본 키워드를 사용하면 null이 참조 유형에 할당되고 0이 값 유형에 할당됩니다.

public T GetDocument()
{
    T doc = default(T);
    lock (this)
    {
        doc = documentQueue.Dequeue();
    }
    return doc;
}

기본 키워드는 사용되는 컨텍스트에 따라 여러 의미를 갖습니다. switch 문은 기본 대 / 소문자를 정의하기 위해 기본값을 사용하며 generics에서는 기본값이 참조 또는 값 형식인지에 따라 일반 형식을 null 또는 0으로 초기화하는 데 사용됩니다.