동적 유형과 객체 유형을 혼용하여 사용했습니다. 이 두 가지 유형간에 차이가 있습니까? 하나를 다른 것보다 사용하는 것이 성능에 미치는 영향이 있습니까? 어느 것이 더 유연합니까?동적 대 객체 유형
답변
그들은 모두 입니다. 상당히입니다.
dynamic
을 사용하는 경우 동적 입력을 선택하므로 대부분의 경우 컴파일 시간 확인이 선택되지 않습니다. 그리고 네, 정적 입력을 사용하는 것보다 성능이 떨어집니다 여기서 정적 유형 지정을 사용할 수 있습니다.
그러나 어쨌든 object
유형으로는 많은 것을 할 수 없습니다. 멤버는 거의 없습니다. 어디에서 사용하고 있습니까? 다양한 유형으로 작업 할 수있는 범용 코드를 작성하려면 보통 object
대신 제네릭을 고려해야합니다. 우리는 심지어 VAR 유형 동적 및 객체 유형 비교 것을 볼 수 있습니다 C# 언어의 발전과 함께
.
- 객체는 C# 1.0에 도입 된
개체 : 여기에 내가이 7 점을 비교하여 배운 3 종류가 있습니다.
- 개체가 .NET Framework의 모든 유형의 기본 클래스이기 때문에 모든 종류의 값을 저장할 수 있습니다.
- 컴파일러에는 유형에 대한 정보가 거의 없습니다.
- 개체 형식을 메서드 인수로 전달할 수 있으며 메서드는 개체 형식을 반환 할 수도 있습니다.
- 오브젝트 변수를 사용하고 원하는 조작을 수행하려면 오브젝트 변수를 원래 유형으로 변환해야합니다.
- 저장된 값이 기본 데이터 형식으로 변환되지 않으면 런타임에 문제가 발생합니다.
- 데이터 유형에 대한 추가 정보가없는 경우에 유용합니다.
바르
- 바르가 C# 3.0
- 그것은 모든 유형의 값을 저장할 수 있습니다 도입하지만, 선언시 var에 유형을 초기화하는 필수했다.
- 형식이 안전합니다. 즉, 컴파일러는 저장된 값에 대한 모든 정보를 가지고 있으므로 런타임에 문제가 발생하지 않습니다.
- Var 형식을 메서드 인수로 전달할 수 없으며 메서드가 개체 형식을 반환 할 수 없습니다. Var 유형은 정의 된 범위에서 작동합니다.
- 컴파일러에서 작업을 수행하는 데 필요한 모든 정보가 있으므로 캐스트 할 필요가 없습니다.
- 컴파일러에 저장된 값에 대한 모든 정보가 있으므로 문제가 발생하지 않습니다.
- 실제 유형, 즉 유형이 익명 인 경우 유용합니다.
동적
- 동적는 C# 4.0
- 그것은 이전 VB 언어 변수 유사한 변수 중 어느 형태를 저장할 수 도입 하였다.
- 형식 안전하지 않습니다. 즉, 컴파일러에는 변수 유형에 대한 정보가 없습니다.
- 동적 형식을 메서드 인수로 전달할 수 있으며 메서드는 동적 형식을 반환 할 수도 있습니다.
- 캐스팅은 필요하지 않지만 저장된 형식과 관련된 속성 및 메서드를 알아야합니다.
- 저장된 값에 대한 모든 정보가 런타임에만 해결되기 때문에 잘못된 속성이나 메서드에 액세스하면 문제가 발생합니다.
- 반사 또는 동적 언어 또는 COM 개체를 사용하여 코드를 작성해야 할 때 유용합니다. 코드를 적게 작성해야하기 때문입니다.
이렇게하면 도움이되기를 바랍니다.
감사합니다. 간단한 언어에서
var은 형식이 아님을 이해합니다. 초기화 된 값을 기반으로 형식을 암시 적으로 결정합니다. 예를 들면 다음과 같습니다. var x = 2; x는 var 유형이 아니며 int 유형입니다. – Nanomurf
:
public static void ConsoleWrite(string inputArg)
{
Console.WriteLine(inputArg);
}
객체 :
public static void Main(string[] args)
{
object obj = "String Sample";
ConsoleWrite(obj);// compile error
ConsoleWrite((string)obj);
Console.ReadKey();
}
동적 : 다음 코드 캐스트 개체를 제외하고 문자열에 컴파일 오류가
웹 가정 다음과 같은 방법을 : 다음 코드는 성공적으로 컴파일되지만 string
을 제외한 값이 있으면 런타임 오류가 발생합니다. 또는
public static void Main(string[] args)
{
dynamic dyn = "String Sample";
ConsoleWrite(dyn);
dyn = 1;
ConsoleWrite(dyn);// Runtime Error
Console.ReadKey();
}
- 1. PropertyGrid 및 동적 객체 유형
- 2. 동적 쿼리 - Expando/동적 객체 유형
- 3. 캐스팅 및 동적 대 Java의 정적 유형
- 4. 터플 대 익명 유형 대 Expando 객체. (LINQ 쿼리 관련)
- 5. Groovy의 동적 유형 유형
- 6. .NET의 동적 필드 유형
- 7. 동적 객체
- 8. 유형 매개 변수 대 스칼라의 멤버 유형
- 9. 반사 유형 대 TypeDescriptor
- 10. JavaScript에서 객체 유형 변경
- 11. 다중 객체 배열 유형?
- 12. 객체 유형 질문
- 13. 장고 템플릿 객체 유형
- 14. 다른 유형 객체
- 15. Node.js modules 대 객체
- 16. C# 동적 유형 변환
- 17. 동적 유형 생성
- 18. JAVA 동적 목록 유형
- 19. 동적 유형 언어로 리팩토링
- 20. id 동적 유형 설명서
- 21. 동적 필드 유형 처리
- 22. 동적 유형 변환
- 23. PHP의 동적 유형 검사
- 24. VAR 대 동적
- 25. 동적 메소드 대 조건문
- 26. 동적 대 사전 [C#]
- 27. PHP에서 유형 힌트가있는 동적 반환 유형?
- 28. 객체 지향 데이터베이스 대 객체 관계형 데이터베이스
- 29. C#, 동적 객체 이름?
- 30. 동적 객체 Tween
Luke가 방금 System.Object에서 사용할 수있는 몇 가지 메소드를 호출했다면 동적으로 호출할까요? –
@Steven : 네, 그렇습니다 - 심지어 GetType은 비 가상입니다! 예를 들어,'ExpandoObject'에서'GetType' 호출에 반응하도록 델리게이트를 설정할 수 있습니다. 무서운 것들.) –
그건 내가 두려워했던 것입니다. 우리가 그 유형에 대한 진실을 알고 싶다면'객체'에 업 캐스팅함으로써'동적 인'을'상자에 넣어야 '하는 것처럼 보입니다. :-) –