C# 你能用一个简单的现实例子简单地解释一下CodeDOM是什么,它的用途是什么吗?

C# 你能用一个简单的现实例子简单地解释一下CodeDOM是什么,它的用途是什么吗?,c#,.net,codedom,C#,.net,Codedom,你能用一个简单的现实例子简单地解释一下CodeDOM是什么,它的用途是什么吗 一个简单的例子,说明了作为开发人员,我为什么需要它,在什么情况下 谢谢CodeDOM代表代码文档对象模型。基本上,它是由对象的分层树表示的代码,一个模型。。考虑一种方法,其中有一些语句: int Foo(int bar) { int i = 0; if ( bar == 1 ) i = 1; return i; } 这将产生一个DOM,如下所示: method foo declarat

你能用一个简单的现实例子简单地解释一下CodeDOM是什么,它的用途是什么吗

一个简单的例子,说明了作为开发人员,我为什么需要它,在什么情况下


谢谢

CodeDOM代表代码文档对象模型。基本上,它是由对象的分层树表示的代码,一个模型。。考虑一种方法,其中有一些语句:

int Foo(int bar)
{
    int i = 0;
    if ( bar == 1 ) i = 1;
    return i;
}
这将产生一个DOM,如下所示:

method foo
    declaration
    if (expression)
        assignment
    return

像这样表示代码的模型允许您对其执行各种操作或检查。

CodeDOM以结构化的方式表示代码。如果您想编写一个像ReSharper这样分析代码或生成代码的程序,您可能会想使用它。有关更多信息,请参见:

您能描述一下这与抽象语法树的关系吗?我知道什么是AST,当然,我也知道如何使用它们。DOM使我困惑。它看起来像一个糟糕的程序表示;它似乎对任何事情都不合适(C#,VB.net,…)。据我所知,它没有足够的细节来捕捉表达式。MS文档没有说明它的真正目的是什么。你说你可以对它“进行各种操作”。像什么?我可以将C#解析为DOM吗?我可以构建DOM并生成C#吗?我可以生成任意的C#程序吗?为什么/为什么不?实际上,我或多或少是在解释CodeDom的概念,而不是具体的实现。然而,你实际上基本上是正确的。微软提供的CodeDom实现只完成了一半。您无法将C#转换为CodeDom,但可以将CodeDom转换为代码甚至程序集。即便如此,也不是所有的语言特性都能实现。我们(编译器社区,而不仅仅是我)使用ASTs的全部原因是,我们没有得到某种半生不熟的程序表示。我见过很多构建“通用程序表示”的尝试。它们中的大多数都比MS CodeDom做得更深入,但仍然失败,因为它们无法表示程序的所有精确细节。(将表达式表示为字符串的论点对我来说是不可能的;让解析器构建AST的原因是为了避免在处理内容时必须进行解析)。那么谁使用CodeDom呢?你不能用它来分析。你听到我在推广微软实施的CodeDom吗?或者你听到我解释什么是DOM代码了吗?我不知道我是否会将codedom描述为AST。里面没有太多的“语法”了。@安德鲁:我不明白你的评论,请解释一下。没什么重要的:)只是说一声+1Hehe,谢谢。你在这个问题上的评论肯定很奇怪。。。尤其是刚才删除的;-)如果他们曾经实现过解析方面的功能,那么您可能希望使用它来分析代码。顺便说一句,解析端从来没有完成过。它似乎对分析东西不是很有用。请参阅对其他答案的评论。。。。