Inconsistent accessibility - potrzeba wyjaśnień

0

PS. Pisząc ostatnie zdanie włąśnie zajarzyłem, że drugi parametr tej formy komponent ListBox jest definiowany automatycznie przez IDE jako private i stąd była niespójność operatorów dostępu. A skoro się namachałem to może niech zostanie dla potomnych.

Witam

Podczas robienia ćwiczenia, zaczął mi wyskakiwać błąd jak w tytule , docelowo poradziłęm sobie z nim tak, że pola typu TaliaKart i metoda która z nich korzysta oznaczyłem wszytko jako "private". Ale nie wiem dlaczego musi być tak a nie inaczej.
W przypadku gdy miałem pola TaliaKart "private" a metodę "public" ten błąd niespójności dostępu dotyczył metody, gdy wszystko oznaczyłęm jako public błąd dotyczył i pól i metody.

Szczegóły w kodzie:

    public partial class Form1 : Form
    {
        public TaliaKart __lewaTalia__;  // tu sygnalizuje błąd jak zmienię na private będzie ok
        private TaliaKart prawaTalia;

        public void UtworzenieDwochWymaganychTalii()
        {
            lewaTalia = new TaliaKart(10);
            prawaTalia = new TaliaKart(enumRodzajTalii.OdDwójek);
            lewaTalia.PosortujKartyWTalii();
            prawaTalia.PosortujKartyWTalii();
        }

        public Form1()
        {
            InitializeComponent();
            UtworzenieDwochWymaganychTalii();

            WypelnijListBoxaNazwamiKartZTalii(listBox_lewy, lewaTalia);
            WypelnijListBoxaNazwamiKartZTalii(listBox_prawy, prawaTalia);
        }

        private void WypelnijListBoxaNazwamiKartZTalii(ListBox initListBox,      
            TaliaKart initTalia)   // zaczęło się tutaj gdy pierwotnie miałem tą metodę zdefiniowaną jako "public" a pola typu TaliaKart jako "private" 
        {
            initListBox.Items.Clear();
            foreach (string nazwaKarty in initTalia.PobierzNazwyKartWTalii())
            {
                initListBox.Items.Add(nazwaKarty);
            }
        }
    }

Wyskakuje mi błąd:

Error 1 Inconsistent accessibility: field type 'HF_str386_ZabawyKartami.TaliaKart' is less accessible than field 'HF_str386_ZabawyKartami.Form1.lewaTalia' C:\Documents and Settings\Polly\Moje dokumenty\Visual Studio 2010\Projects\HF_str386_ZabawyKartami\HF_str386_ZabawyKartami\Form1.cs 14 26 HF_str386_ZabawyKartami

Nie rozumiem tego problemu, dlaczego to wszystko musi być private i dostępne tylko wewnątrz Form1?

0

A jaki modyfikator ma klasa TaliaKart?

0

Domyślny czyli internal, ale nawet jak jawnie dałem jej public to to nie rozwiązuje problemu.

1

Jeżeli w publicznej klasie bezpośrednio w namespace umieszczasz publiczne pole o typie, które jest private, protected albo internal to dostaniesz właśnie taki błąd. Typ zawsze musi być widoczny tak samo albo bardziej niż pole z takim typem. Internal znaczy, że typ będzie dostępny tylko z poziomu tego samego assembly, a domyślnie każde publiczne pole publicznej klasy bezpośrednio w namespace jest widoczne z dowolnego assembly.

0

Czyli w moim przypadku w kodzie z pierwszego postu :

  1. błąd polega na tym, że pole lewaTalia typu TaliaKart jest publiczne chociaz sam typ TaliaKart jest zdefionioany jako mniej dostepny czyli internal, tak?

2) A co z ListBoxem? IDE go definiuje automatycznie jako:

 private System.Windows.Forms.ListBox listBox_lewy;

a sam Typ ListBox jest zdefiniowany jako public:

http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.aspx

[ComVisibleAttribute(true)]
[DefaultBindingPropertyAttribute("SelectedValue")]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)]
public class ListBox : ListControl 

Czyli teoretycznie to też to samo co w punkcie 1)?</del>

0

Tak.

1 użytkowników online, w tym zalogowanych: 0, gości: 1