Pregunta

Estoy usando clases parciales para dividir algunas funcionalidades entre 2 archivos, pero recibo un error. ¿Qué estoy haciendo mal?

A1.cs:

private partial class A
{
    private string SomeProperty { get { return "SomeGeneratedString"; } }       
}

A2.cs:

private partial class A
{
    void SomeFunction()
    {
        //trying to access this.SomeProperty produces the following compiler error, at least with C# 2.0
        //error CS0117: 'A' does not contain a definition for 'SomeProperty'
    }
}
¿Fue útil?

Solución

¿Están las dos clases parciales en el mismo espacio de nombres? Eso podría ser una explicación.

Otros consejos

Misma respuesta que @Andrey K pero en términos simples

Establezca la acción de compilación de todas sus clases parciales en 'Compilar' usando las ventanas 'Propiedades' de cada uno de esos archivos

 Ventana de propiedades - loading= Crear propiedad de acción ">

espacio de nombres diferente?

Al principio, no pude reproducir su error.

Cuando estas clases parciales se definen solas, dentro de un espacio de nombres, la palabra clave privada hace que la construcción falle con " Los elementos definidos en un espacio de nombres no se pueden declarar explícitamente como privados, protegidos o protegidos " ; ...

Si los mantengo privados y los guardo en otra clase, todo funciona bien.

Puedo reproducir su error solo cuando, en un archivo, tengo parte de la clase anidada dentro de otra clase, y en otro archivo, NO anido la clase y luego elimino la palabra clave privada ... así:

Class1.cs:

namespace stackoverflow.answers
{
    public class Foo
    {
        private partial class Bar
        {
            private string SomeProperty { get { return "SomeGeneratedString"; } }
        }
    }
}

Class2.cs:

namespace stackoverflow.answers
{
    partial class Bar
    {
        void SomeFunction()
        {
            string bar = this.SomeProperty;
        }
    }    
}

También recibo el error que describiste si los espacios de nombres difieren.

Publique el código completo de la solución, ya que el código proporcionado es una sintaxis de C # no válida y no se puede analizar sin más contexto.

Edición :

solución: acción de compilación - > Conforme, nada más

Intentaré ser más específico:

Tenía una clase compartida entre 3 clases parciales en 3 archivos diferentes. En un momento, una llamada a una función (de una parte, de una función declarada en otra parte) comenzó a mostrar el error & Quot; no existe en el contexto actual & Quot ;. Me tomó mucho tiempo hasta que algún tipo me ayudó a descubrir que accidentalmente configuré la acción de compilación del archivo con uno parte de " EmbeddedResourse " en lugar de " Compile " ;.

Para cambiar la acción de compilación, debe hacer clic derecho en el archivo en el explorador de soluciones, luego elegir propiedades. Luego cambie la acción de compilación.

Esta pregunta es antigua, y mi respuesta no es exactamente útil en este mismo caso. Pero puede ser útil en otro caso muy raro relacionado con clases parciales. Lo siento si mi inglés no está claro.

Creo que es porque estás declarando tu clase como " private " ;. Intente cambiar el modificador a & Quot; internal & Quot; para que las dos & "; mitades &"; de la clase puede " ver " entre sí dentro del mismo conjunto.

El error que obtengo es:

Los elementos definidos en un espacio de nombres no se pueden declarar explícitamente como privados, protegidos o protegidos internos

Supongo que es un problema de espacio de nombres como se indicó anteriormente.

Todos los archivos deben estar en la misma carpeta.

Analizo tu código. declaró clase parcial como clase anidada, esto es causa de mostrar error. por qué la clase parcial bcz no declarará como clase anidada, la palabra clave parcial se divide en archivos finales, por lo que cada archivo nae es el mismo cuando declaraste en clase anidada que no reconocerá.

Un caso de esquina donde la ayuda adicional puede ahorrarle tiempo es si está utilizando una clase parcial para complementar la clase generada de una Plantilla de texto en tiempo de ejecución.

Lo más probable es que el problema sea que el espacio de nombres de su clase parcial es diferente del espacio de nombres de la parte generada de esa clase. Para verificar eso, simplemente mire el código generado.

Para solucionarlo, debe editar el archivo .csproj para su proyecto y, en la sección sobre esa plantilla, agregue la etiqueta <ClassNamespace>:

<Content Include="MyTemplate.tt">
  <Generator>TextTemplatingFilePreprocessor</Generator>
  <ClassNamespace>My.Namespace</ClassNamespace>
  <LastGenOutput>MyTemplate.cs</LastGenOutput>
</Content>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top