IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Eldest
Tvůrce
Avatar
Eldest:22.3.2015 16:22

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ý
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 16:40

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Eldest:22.3.2015 16:46

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ý
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 16:47
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ý
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 16:48

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

 
Nahoru Odpovědět
22.3.2015 16:48
Avatar
Eldest
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Eldest:22.3.2015 16:53

Ne, nemá.

 
Nahoru Odpovědět
22.3.2015 16:53
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 16:54

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Eldest:22.3.2015 16:58

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
Tvůrce
Avatar
Eldest:22.3.2015 16:59

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ý
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 17:03

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

public class SearchAddress

 
Nahoru Odpovědět
22.3.2015 17:03
Avatar
Eldest
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Eldest:22.3.2015 17:05

Kde co? :o:D

 
Nahoru Odpovědět
22.3.2015 17:05
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 17:40

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Eldest:22.3.2015 17:45

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ý
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 17:51

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
22.3.2015 17:51
Avatar
Eldest
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Eldest:22.3.2015 18:15

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ý
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 19:01

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Eldest:22.3.2015 19:04

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ý
Tvůrce
Avatar
Odpovídá na Eldest
Jan Vargovský:22.3.2015 19:06

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

 
Nahoru Odpovědět
22.3.2015 19:06
Avatar
Eldest
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Eldest:22.3.2015 19:09

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.