2010-10-21 16 views
31

¿Qué hay de malo enC#: accesibilidad inconsistente: Tipo de propiedad

public partial class MainWindow : Window 
{ 
    public ObservableCollection<TabViewModel> Tabs { get; set; } 
    public ICollectionView TabsViewSource { get; set; } 
    public int CurrentIndex { get { return TabsViewSource.CurrentPosition; } } 

consigo

accesibilidad inconsistente: Tipo de propiedad 'System.Collections.ObjectModel.ObservableCollection' es menos accesible que la propiedad TabsRendering'. MainWindow.Tabs'

cuando cambio el código para

public partial class MainWindow : Window 
{ 
    ObservableCollection<TabViewModel> Tabs { get; set; } 
    public ICollectionView TabsViewSource { get; set; } 
    public int CurrentIndex { get { return TabsViewSource.CurrentPosition; } } 

Funciona. ¿Cuál es incorrecto con la public en el ObservableCollection

Respuesta

62

Hacer TabViewModel un tipo de público también.

Obviamente, no tiene sentido para un propiedad pública sobre un tipo que contiene pública ser de un tipo que no es pública. ¿Cómo podría la propiedad presentarse a asambleas externas?

Su segunda muestra funciona porque, como regla general, el hecho de no proporcionar modificadores de accesibilidad significa que el modificador menos aplicable se elige como predeterminado, en este caso: privado. Claramente, no hay problemas de consistencia al declarar una propiedad privada de tipo interno (?).

+1

Niza explicación –

+0

oh ... Estaba comprobando que 'MainWindow' es público ... lol –

+0

me ayudó.gracias a Ani –

3

¿Cuál es la accesibilidad en TabViewModel? Supongo que no es público.

+0

esta respuesta merece mucho más atención que otras, llol. corto pero directo al punto. –

1

Toda la información anterior es completamente correcta y funciona bien. Solo quiero agregar por experiencia personal que si está usando TFS y obtiene su proyecto de TFS, las diferentes versiones de Visual Studio también pueden generar este error.

Ingresé a un proyecto con Visual Studio 2013 actualización 2 y sincronicé con TFS para obtener la solución. Cuando traté de ejecutar el proyecto, obtuve 80 errores. Todos ellos eran como "... menos accesible que la propiedad ...". Ahora resulta que necesitaba la actualización 4. Una vez que mi Visual Studio se actualizó, reverenciaba los cambios y funcionó perfectamente.

Esto podría ser útil si ninguna de las opciones anteriores funciona y está utilizando TFS.

2

El mensaje es muy directo. Es contradictorio con lo que quieres hacer. Dice que tienes algo declarado como público (Pestañas, en este caso) pero el tipo que lo usaría también necesita saber acerca de TabViewModel que no es público. Haga público o algún especificador de acceso coherente.