Diskuze: Chyba - nekonzistentní dostupnost

C# .NET .NET (C# a Visual Basic) Chyba - nekonzistentní dostupnost American English version English version

Avatar
Eldest
Redaktor
Avatar
Eldest:

Ahoj, pokusím se všechno vysvětlit ve stručnosti.

C# Windows Form aplikace -> "ve hlavní třídě" mám následující zdrojový kód:

public partial class Form1 : Form
{
protected Connection connection = null;
protected int a;
...

Pokud nějaká jiná třída dědí od Form1 a chci "přistupovat" k proměnné a. Vše je Ok, ale pokud chci "přistoupit" ke connection překladač hlásí tuto chybu: Error 2 Inconsistent accessibility: field type 'ProjektAdresy­.Connection' is less accessible than field 'ProjektAdresy­.Form1.Connec­tion' ...

Kde je chyba vím, ale vůbec nevím, jak to opravit. Díky za rady

Editováno 22.3.2015 16:23
 
Odpovědět 22.3.2015 16:22
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:

Connection má modifikátor přístupu internal/protec­ted/private, hoď ho na public.

 
Nahoru Odpovědět 22.3.2015 16:40
Avatar
Eldest
Redaktor
Avatar
Odpovídá na Jan Vargovský
Eldest:

Díky za radu. Když jsem ho hodil na public, tak žádná změna. Jinak Connection je taky třídy, kterou jsou vytvořil, ale to je asi jasné.

 
Nahoru Odpovědět 22.3.2015 16:46
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:
public partial class Form1 : Form{
public Form1(Connection connection)
{
...
}
}

"Vysvětlení: Dejme tomu, že to bude class library, ty si jí naimportuješ někde do dalšího projektu a budeš chtít vytvořit instanci. Chce po tobě v konstruktoru nějaký objekt connection typu Connection, ale ty vůbec nevíš, že existuje, protože je internal (nebo něco méně), místo public."

 
Nahoru Odpovědět 22.3.2015 16:47
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:

Nemá zase ten Connection nějaké dependencies na ostatní třídy?

 
Nahoru Odpovědět 22.3.2015 16:48
Avatar
Eldest
Redaktor
Avatar
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:

Rebuildni to (F6) a napiš tu chybu co to hlásí. Určitě musela zmizet.

 
Nahoru Odpovědět 22.3.2015 16:54
Avatar
Eldest
Redaktor
Avatar
Odpovídá na Jan Vargovský
Eldest:

Popisoval jsem to sice na jiném příkladě, ale jinak to je to stejné.....(Se­archAddress)

 
Nahoru Odpovědět 22.3.2015 16:58
Avatar
Eldest
Redaktor
Avatar
Eldest:

Zdroják SearchAddress pokud to v něčem pomůže

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace ProjektAdresy
{
    class SearchAddress
    {
        private Connection connection = null;
        private MySqlCommand command = new MySqlCommand();
        private MySqlDataReader reader = null;

        public SearchAddress(Connection connection)
        {
            this.connection = connection;
        }

        public List<ComboBoxItem> getResult(string command, string parametr)
        {
            List<ComboBoxItem> array = new List<ComboBoxItem>();

            this.command.CommandText = command;
            this.command.Connection = this.connection.getLink();

            using(this.reader = this.command.ExecuteReader())
            {
                while(this.reader.Read())
                {
                    array.Add(new ComboBoxItem(this.reader[parametr].ToString()));
                }
            }

            return array;
        }

        public int getId(string command, string parametr)
        {
            int id;

            this.command.CommandText = command;
            this.command.Connection = this.connection.getLink();

            using (this.reader = this.command.ExecuteReader())
            {
                this.reader.Read();
                id = (int)this.reader[parametr];
            }

            return id;
        }
    }
}
 
Nahoru Odpovědět 22.3.2015 16:59
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:

Nevím, ale děláš si ze mě srandu ne? :D

public class SearchAddress

 
Nahoru Odpovědět 22.3.2015 17:03
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:

Pročti si vše co jsem ti tu napsal. Resp. řekni mi, co jsi změnil.

 
Nahoru Odpovědět 22.3.2015 17:40
Avatar
Eldest
Redaktor
Avatar
Odpovídá na Jan Vargovský
Eldest:

Podle screenu jsem to hodil na public a vytvořil konstrktor Form1 (Main), ale to nefunguje, protože jsem to udělal asi špatně, ale takto jsem to od tebe pochopil.

 
Nahoru Odpovědět 22.3.2015 17:45
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:

Máš změnit modifikátor přístupu té třídy z internal na public (z ničeho na public) a né modifikátor přístupu té proměnné uvnitř té třídy.

Zkráceně, nic neměň. Jen přidej public před to class.

Btw, ten konstruktor měl být jenom reálné vysvětlení proč to nejde.

Editováno 22.3.2015 17:52
 
Nahoru Odpovědět  +1 22.3.2015 17:51
Avatar
Eldest
Redaktor
Avatar
Odpovídá na Jan Vargovský
Eldest:

Díky za trpělivost, jsem nějaký natvrdlý. Už se mi to povedlo opravit, ale v momentě, když jsem dal před class public, tak všechny metody v té třídě začaly hlásit tu samou chybu.

 
Nahoru Odpovědět 22.3.2015 18:15
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:

Jasně no, tak ono to stejné pravidlo platí pro všechny ty třídy. Prostě všude před třídy, struktury, enumy a interfacy nacpi public a máš klid. Až se budeš chtít posunout někdy v programování dál, tak si pročti tento thread a snad už budeš chápat, proč tomu tak je :)

 
Nahoru Odpovědět 22.3.2015 19:01
Avatar
Eldest
Redaktor
Avatar
Odpovídá na Jan Vargovský
Eldest:

Ok, díky. Public jsem všude dal, ale stejně si překladač stěžuje :(

 
Nahoru Odpovědět 22.3.2015 19:04
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Eldest
Jan Vargovský:

To samé udělej i s třídou Connection a ComboBoxItem.

 
Nahoru Odpovědět 22.3.2015 19:06
Avatar
Eldest
Redaktor
Avatar
Odpovídá na Jan Vargovský
Eldest:

Vyřešeno! Strašně moc díky :)

 
Nahoru Odpovědět 22.3.2015 19:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.