2010-11-09 19 views
5

Actualmente estoy en un escenario en el que tengo que hacer uso de clases parciales. En esta clase parcial tengo algunos métodos que necesitan abordar campos en la otra clase.Campos de clase de acceso de la clase parcial

por ejemplo

Editar: Lo siento: la primera clase ya está declarada partial!

public partial class myClass 
{   
    private string _myString; 

    public string myString 
    { 
     get { return _myString; } 
     set { _myString = value; } 
    } 
} 

y

public partial class myClass 
{ 
    public void doSomething() 
    { 
     myString = "newString"; 
    } 
} 

El compilador dice myString no existe en la clase parcial!

¿Cómo puedo solucionar este problema?

Respuesta

6

Hay algunas cosas que hay que arreglar con el código que envió:

Cuando se utilizan las clases parciales en C# todos partes de la clase deben ser declarados como clases parciales

Usted tiene

public class myClass {} 
public partial class myClass {} 

¿Qué necesita para convertirse en

public partial class myClass {} 
public partial class myClass {} 

En segundo lugar, usted está tratando de establecer

myString="newString"; 

pero myString es una propiedad pública sin un regulador.

Así que, o añadir un regulador cuando se declara myString

public string myString 
{ 
    get{ return _myString; } 
    set { _myString = value; } 
} 

o simplemente utilizar

_myString="newString"; 

en su archivo de segunda clase partical.

0

Simplemente tiene que marcar la clase como partial en ambos lugares, no solo uno de ellos.

0

Cuando pongo el código en Visual Studio que tiene un error diferente:

myString = "newString"; 
Error Property or indexer 'ConsoleApplication1.Program.myClass.myString' cannot be assigned to -- it is read only 

Si lo cambio a este, que funciona bien:

_myString = "newString"; 

Editar:

Usted no necesita marcar una clase como parcial en ambos palacios, esto compila bien:

public class myClass 
    { 

     private string _myString; 

     public string myString 
     { 
      get { return _myString; } 
     } 
    } 


    public partial class myClass 
    { 

     public void doSomething() 
     { 
      _myString = "newString"; 
     } 

    } 
+0

Si bien podría compilarse bien, en la documentación dice que es necesario. Es probable que sea una buena idea hacerlo de todos modos para ser consistente y a prueba de futuro. – Khalos

+0

Acabo de seguir lo que hace el diseñador de formularios ... ¡travieso diseñador de winForms! – Pondidum

+0

Huh, eso es gracioso. ¡Alguien no leyó sus propias especificaciones! – Khalos

1

Suponiendo que tanto la declaración se refieren al mismo espacio de nombres, su primera declaración no contiene la palabra clave parcial:

Using the partial keyword indicates that other parts of the class, struct, or interface can be defined within the namespace. All the parts must use the partial keyword. All of the parts must be available at compile time to form the final type. All the parts must have the same accessibility, such as public, private, and so on.public, private, and so on.

http://msdn.microsoft.com/en-en/library/wa80x488(v=VS.80).aspx

21

es la clase parcial en el mismo espacio de nombres?

Cuestiones relacionadas