인터넷 검색은 키워드 만 나오지만 코드가 우연히 발견되었습니다.
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
숫자 값 유형을 반환 합니다 .
들면 struct
S, 그 구조체의 각각의 부재들이 값 또는 참조 타입인지에 따라 제로 또는 null 초기화 반환한다.
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으로 초기화하는 데 사용됩니다.