2010-10-31 9 views
11

en C# ¿Cómo difiere una declaración de una definición, es decir:Declaraciones vs definiciones

  1. una declaración de clase vs una definición de clase
  2. una declaración de variable vs definición
  3. Una declaración de parámetros método vs definición

En C++, esto era bastante obvio, pero en C# por lo que puedo decir del estándar ECMA y MSDN es que todo es una declaración y donde se usa la definición de palabra, se usa para significar lo mismo que declaración.

Respuesta

7
  1. Esa distinción no existe. Se refiere al alcance de una declaración, el punto de definición es irrelevante para el alcance de la variable/campo.

  2. int x; // 'x' is declared 
    x = 10; // 'x' is assigned 
    
    
    int y = 20; // 'y' is both declared and assigned 
    
  3. Eso no tiene mucho sentido. Un argumento de método se declara en la firma del método.

creo que estás un poco confundido en cuanto a la terminología en 1 y 3.

+0

Bueno, en C++: int x = 10; // No es una declaración y es estrictamente una definición. Es por eso que estoy confundido con la terminología de C#. Además, C++ permite declaraciones de clase que son completamente diferentes de las definiciones de clases. C# permite clases parciales y clases completamente definidas, ¡pero ambas parecen ser declaraciones! –

+0

@michael: No, ambas son definiciones. –

+0

@michael: las clases parciales son solo una clase dividida en varios archivos de origen. Algunos miembros se definen en un archivo y algunos en otros. –

2

No porque C# no tiene que hacer una distinción.

10

El C++ construir fechas modelo a partir de una era en la que los núcleos de ferrita fueron un dólar la docena. Múltiples archivos de código fuente compilados uno a la vez. Con un compilador de un solo pase. Un enlazador para pegar todo junto. Eso hizo declaraciones separadas en archivos de encabezado y prototipos necesarios.

El compilador C# aprovecha al máximo los recursos modernos de la máquina. Todos los archivos de código fuente que constituyen un ensamblado se compilan al mismo tiempo, el compilador realiza al menos dos pases para que pueda analizar las declaraciones antes de los cuerpos del método. Todavía hay un posible modelo de enlace, pero se usa muy raramente.

Las únicas nociones de una declaración que tiene que coincidir con una definición que puedo pensar es un tipo de delegado que tiene que coincidir con un método de destino y una declaración de miembro de interfaz que tiene que coincidir con su implementación concreta.

+2

+1 para núcleos de ferrita. – Euphoric

15

donde se utiliza la definición de la palabra, que se utiliza para significar lo mismo que la declaración

correcta.

El concepto de 'declaración' como definición soft/forward es necesario en C y C++ debido a su modelo de compilación. C++ (conceptualmente) usa la compilación de un solo pase, C# es multi-pass. Considere:

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++ no puede manejar el campo Bar b sin una declaración en primer lugar. C# puede.

1

Según Kernighan & Ritchie en "The C Programming Language": Una "declaración" anuncia las propiedades de las variables; consiste en un nombre y una lista de variables, tales como: int fahr, celsius;

De acuerdo con Stroustrup en "El lenguaje de programación C++": Una "declaración" es una declaración que introduce un nombre en el programa. Especifica un tipo para ese nombre. Un tipo define el uso apropiado de un nombre o una expresión.

Ninguno de los dos libros define específicamente "definición". Pero ambos usan el término en el sentido científico del VALOR de una variable. Por lo tanto, una declaración de función declara la firma de la llamada de la función. Una definición de función contiene el código real.

La necesidad de tener significados separados en estos idiomas se debe a los compiladores de antaño. Necesitaban saber los tipos de nombres antes de tiempo, antes de que el nombre se usara realmente. De lo contrario, tendrían que hacer otro pase a través del código fuente.

0

Las respuestas a las preguntas originales 1, 2, 3: ninguna diferencia en C#

Sin embargo podría valer la pena mencionar esos términos en lo que respecta a los métodos:

  • Declaración es el lugar en interfaz donde simplemente "declaramos" la firma del método
  • Definición es el lugar real donde "definimos" la implementación real de la declaración método anterior. (igual que "implementación")
Cuestiones relacionadas