2010-10-31 165 views
11

在C#如何声明从定义不同,即:声明VS定义

  1. 类声明Vs的类定义
  2. 变量声明VS定义
  3. 的方法参数声明VS定义

在C++中,这很明显,但在C#中,从ECMA标准和MSDN中可以看出,一切都是声明,并且在使用单词定义的地方,用来表示与声明相同的东西。

回答

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

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

我觉得你是个位1和3

+0

那么,在C++中:int x = 10; //不是一个声明,而是一个严格的定义。这就是为什么我对C#术语感到困惑。另外,C++允许类声明与类定义完全不同。 C#允许部分类和完全定义的类,但两者似乎都是声明! – 2010-10-31 19:22:10

+0

@ michael:不,两者都是定义。 – 2010-10-31 19:26:26

+0

@michael:部分类只是一个类拆分成多个源文件。一些成员被定义在一个文件中,一些成员被定义在其他文件中 – 2010-10-31 19:34:19

2

它并不是因为C#不需要做出区分。

10

混淆有关术语的C++从这样一个时代的铁氧体磁芯是一美元一打建模型日期。多个源代码文件一次编译一个。使用单通编译器。链接器将所有内容粘合在一起。这在头文件和原型中需要单独的声明。

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

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

+2

+1为铁氧体磁芯。 – Euphoric 2010-10-31 21:03:01

15

在使用这个词的定义,它是用来表示同样的事情声明

正确的。

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

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

class Foo // counts as a declaration of Foo 
{ 
    Foo f; // use of declared but still incomplete type 
    Bar b; // use of declared but still undefined class Bar 
} 

class Bar // definition and re-declaration 
{ 
} 

C++无法首先处理Bar b字段。 C#可以。

1

根据Kernighan &“The C Programming Language”中的Ritchie: “声明”宣布变量的属性;它由一个名称和一个变量列表组成,例如: int fahr,celsius;

根据Stroustrup在“The C++ Programming Language”中的说法: “声明”是一个声明,它向程序中引入了一个名称。它为该名称指定了一个类型。一个类型定义了名称或表达式的正确使用。

这两本书都没有具体定义“定义”。但是两者都使用科学意义上的变量的VALUE这个术语。因此,函数声明声明函数的调用签名。函数定义包含实际的代码。

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

0

答案原来的问题1,2,3:在C#中没有差异

但可能是值得一提的这些术语的问候方法:

  • 宣言是发生在接口哪里我们只是“声明”方法的签名
  • 定义是我们“定义”声明的实际执行的实际位置以前的方法。 (与“实现”相同)