声明与定义

时间:2010-10-31 19:15:41

标签: c# .net

在C#中,声明与定义有何不同,即:

  1. 类声明与类定义
  2. 变量声明与定义
  3. 方法参数声明与定义
  4. 在C ++中,这是相当明显的,但在C#中我从ECMA标准和MSDN中可以看出,所有内容都是声明,并且在使用单词定义时,它用于表示与声明相同的内容。

6 个答案:

答案 0 :(得分:18)

  

使用单词定义时,它用于表示与声明

相同的内容

正确。

由于其编译模型,C和C ++中需要将“声明”作为软/转发定义的概念。 C ++(概念上)使用单通道编译,C#是多通道。考虑:

class Bar; // declaration: needed in C++, illegal and unnecessary in C#

class Foo  // start of definition, counts as a declaration of Foo
{
    Foo f; // use of declared but still incompletely defined class Foo
    Bar b; // use of declared but still undefined class Bar
}

class Bar  //  definition and re-declaration  
{
}

如果没有声明,C ++就无法处理Bar b字段。 C#可以。

答案 1 :(得分:10)

  1. 这种区别不存在。您指的是声明的范围,定义点与变量/字段的范围无关。

  2. int x;  // 'x' is declared
    x = 10; // 'x' is assigned
    
    
    int y = 20; // 'y' is both declared and assigned
    
  3. 这没有多大意义。方法参数在方法签名中声明。

  4. 我认为你对1和3中的术语有点困惑。

答案 2 :(得分:10)

C ++构建模型可以追溯到铁氧体核心价值十几美元的时代。一次编译一个多个源代码文件。使用单通道编译器。链接器将所有内容粘合在一起。这使得头文件和原型中的单独声明变得必要。

C#编译器充分利用了现代机器资源。构成程序集的所有源代码文件都是同时编译的,编译器至少进行两次传递,因此它可以在方法体之前解析声明。还有一种可能的链接模型,但很少使用它。

必须匹配我能想到的定义的声明的唯一概念是必须匹配目标方法的委托类型和必须匹配其具体实现的接口成员声明。

答案 3 :(得分:2)

不是因为C#不需要区分。

答案 4 :(得分:2)

对原始问题1,2,3的回答:C#没有区别

然而,在方法方面可能值得一提:

  • 声明位于接口中,我们只是“声明”方法的签名
  • 定义是我们“定义”声明的先前方法的实际实现的实际位置。 (与“实施”相同)

答案 5 :(得分:1)

根据Kernighan& Ritchie in" C Programming Language": A"声明"宣布变量的属性;它由一个名称和一个变量列表组成,例如: int fahr,摄氏;

根据Stroustrup" The C ++ Programming Language": A"声明"是一个在程序中引入名称的语句。它指定该名称的类型。类型定义了名称或表达式的正确使用。

这两本书都没有明确定义"定义"。但两者都使用科学意义上的变量值。因此,函数声明声明了函数的调用签名。函数定义包含实际代码。

需要在这些语言中具有单独的含义是因为过去的编译器。在实际使用名称之前,他们需要提前知道名称的类型。否则他们需要再次通过源代码。