2010-07-02 30 views
9

tengo una clase parcial como estoclase parcial con el método mismo nombre

public partial class ABC 
{ 
    public string GetName() 
    { 
    //some code here 
    } 

    public string GetAge() 
    { 
    //some code here 
    }  
} 

public partial class ABC 
{ 
    public string GetSex() 
    { 
    //some code here 
    } 

    public string GetAge() 
    { 
    //some code here 
    }  
} 

cómo estas fusión de clase 2 en tiempo de compilación? Por favor dame una explicación al respecto.

Respuesta

16

Habrá error de tiempo de compilación cuando intente compilar este código.

¿Qué ocurre en tiempo de construcción es el compiler combina todos los miembros definidos en todas las definiciones parciales de la clase en uno. Luego intentará compilarlo de la manera habitual.

En su caso se producirá un error mencionar ya ha definido un método con el mismo nombre.

6

No compila, ya que no puede tener dos métodos con el mismo nombre en una clase.

+0

si 2diferentes usuarios que trabajan en estas clases pueden cometer este error. ¿Cómo puedo evitar esto? – Pankaj

+6

@Pankaj: hágales hablar entre ellos =) – Jens

+1

@Pakaj - al tener un buen sistema de integración continua que no les permite verificar el código que no compilará. – cjk

2

Incluso además de los errores sintácticos, su código no se compilará. Obtendrá el siguiente error:

Type 'MyNamespace.ABC' already defines a member called 'GetAge' with the same parameter types

Esto es porque el compilador se fusionará todas las partes de una clase parcial en una sola clase como Sección 10.2 del C# Language Specification explica:

With the exception of partial methods (§10.2.7), the set of members of a type declared in multiple parts is simply the union of the set of members declared in each part. The bodies of all parts of the type declaration share the same declaration space (§3.3), and the scope of each member (§3.7) extends to the bodies of all the parts.

C# no permitirá tener métodos con los mismos nombres y con el mismo número y tipos de argumentos dentro de una sola clase. Esto se afirma en la sección 1.6.6 de la especificación:

The signature of a method must be unique in the class in which the method is declared. The signature of a method consists of the name of the method, the number of type parameters and the number, modifiers, and types of its parameters. The signature of a method does not include the return type.

No es una opción, aunque para agregar la declaración de un método en una parte de una clase parcial y la aplicación a la otra; Métodos parciales. Puede leer más sobre ellos en el blog de Eric Lippert sobre ese tema:

What's the difference between a partial method and a partial class?

0

no se combinan: tendrás un error en tiempo de compilación.

0

No se fusionarán: error de tiempo de compilación. Pueden fusionarse en su caso si los coloca accidentalmente en espacios de nombres diferentes.

0

El preprocesador (o compilador tal vez) escanea la carpeta de su proyecto durante una de sus ejecuciones, y comprueba los nombres de las clases que están en un proyecto (o ensamblado para ser precisos). Luego marca clases parciales y verifica si hay definiciones múltiples de ellas.
Pregunta a Eric Lippert acerca de los detalles. A continuación, combina métodos, comentarios, atributos, miembros, interfaces, etc. HA leído en la especificación C# lang. Sus métodos no tienen modificador parcial, así como los chicos antes que yo lo notaron, no compilará.

1

Las clases parciales se combinan durante la compilación. Los compiladores buscan las clases parciales y las integran durante la compilación. Simplemente combina "dos" clases parciales en una clase. No se realiza ninguna modificación en el CLR para la implementación de clases parciales. Puede considerarlo simplemente como la fusión de "dos" clases parciales.

Por ejemplo para su código que tendrá:

public partial class ABC 
{ 
    public string GetName() 
    { 
    //some code here 
    } 

    public string GetAge() 
    { 
    //some code here 
    } 

    public string GetSex() 
    { 
    //some code here 
    } 

    public string GetAge() 
    { 
    //some code here 
    } 
} 

y que le dará un error porque no se puede tener 2 métodos con el mismo nombre y la firma (véase GetAge método).

0

Prueba esto:

public class ABC 
{ 
    public string GetName() 
    { 
    //some code here 
    } 

    public string GetAge() 
    { 
    //some code here 
    } 
} 

public partial class ABC 
{ 
    public string GetSex() 
    { 
    //some code here 
    } 

    public string GetAge() 
    { 
    //some code here 
    }  
} 

Deje el parcial de la primera clase!

+0

Este código no funcionará, dará el siguiente error, "Falta un modificador parcial en la declaración del tipo 'ABC'; existe otra declaración parcial de este tipo" –

Cuestiones relacionadas