2013-04-26 1 views
6

Expression Trees는 BCL 개체/라이브러리의 핵심 언어 기능입니까? C#의 핵심 언어 기능 없이는 구축 할 수없는 것이 있습니까?Expression Trees는 C#의 핵심 언어 기능입니까?

+4

'Func '~'Expression '형식의 람다에서 컴파일러가 컴파일시에 수행해야하는 암시 적 캐스트가있는 정도까지는 그렇게 생각합니다. –

+1

람다 식을 표현식 트리로 변환하는 대신 빌더 메서드를 사용할 수 있습니다. 하지만 좀 더 자세한 정보가 있습니다. – CodesInChaos

+0

어떤 기능에 대해 묻고 있습니까? – SLaks

답변

3

아니요, 표현식 트리는 언어 기능이 아닙니다. 모든 .NET 언어에서 사용할 수 있으므로 C#과 관련 될 수 없습니다. 이들은 내장 어셈블리에 정의 된 일반 CLR 유형입니다.

람다 식 (및 LINQ)을 통한 생성은 C#에 따라 다릅니다. 하지만 언제든지 수동으로 Expression을 수동으로 생성 할 수 있습니다. C# 컴파일러 자체는 잘 알려진 Expression 정적 생성 메서드를 호출하는 것 이상을 수행하지 않습니다. 이전 .NET 버전으로 구성된 Reflector를 사용하여 바이너리를 디 컴파일하면 컴파일러에서 나오는 내용을 검사 할 수 있습니다.

식 트리에서 .NET Framework 내부 API를 사용하는지 여부는 관련없는 질문이지만 필자는 이유가 무엇인지 생각할 수 없습니다.

+1

"아니요, 언어 기능이 아닙니다. 모든 .NET 언어에서 사용할 수 있으므로 C# 전용이 될 수 없습니다." -이게 옳지 않아. 그들은 C# ... 및 F # ... 및 Visual Basic의 언어 기능입니다. ---- 각자는 소스 파일의 텍스트에서 표현식 트리를 실제로 만들 때 언어 구문 등을 알아야합니다. –

+1

@Timothy : 아니요, 당신은 _lambda 표현식을 말하는 겁니다. _ 이것들은 언어 기능입니다. 'Expression' 클래스 자체는 단지 정규 .NET 클래스입니다. .NET 클래스를 사용할 수있는 모든 것은 'Expression' 클래스를 사용할 수 있습니다. –

+0

@JeffMercado 오 ... 맞아. 나는 원래 질문이'Expression' 클래스 자체가 아닌'-expression' 기능에 관한 것이라 생각했습니다. 예, 언어 기능이 아닙니다. :) –

0

Expression 클래스 정의에서 볼 수 있듯이 System.Linq.Expressions 네임 스페이스에 정의되어 있습니다. Expression은 C# 언어 기능이 아니며 CLR을 대상으로하는 모든 언어에서 사용할 수있는 클래스입니다.

예를 들어 MSDN에서 "Expression Trees (C# and Visual Basic)"이라는 제목의 기사에서 C# 및 VB.NET을 사용하여 표현식 트리를 만들고 소비하는 방법을 설명합니다.