NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Petr Vít
Člen
Avatar
Petr Vít:23.2.2018 21:54

Zdravím,

již mám nějaké povědomí o modifikatorech private, public atd. Ale tento kod(viz obrazek) nejde zkompilovat. Víte kde dělám chybu?
Díky

 
Odpovědět
23.2.2018 21:54
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:23.2.2018 21:59

Keďže nemáš pri metóde Zkouska uvedený prístupový modifikátor, kompilátor vždy predpokladá najreštriktívnejší možný - v tvojom prípade private. Dopíš tam explicitne public a malo by to ísť.

Nahoru Odpovědět
23.2.2018 21:59
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na Petr Vít
Lukáš Hornych:23.2.2018 21:59

U té metody si nespecifikoval jestli chceš, aby byla privátní nebo veřejná. Tím, že si tam nic nenapsal, program automaticky bere, že je privátní a tudíž dostupná jen v rámci té jedné třídy, proto jí nemůžeš zavolat z venčí.

 
Nahoru Odpovědět
23.2.2018 21:59
Avatar
Petr Vít
Člen
Avatar
Petr Vít:23.2.2018 22:15

Oba mate pravdu, s publicem to bezi.. Teda bezi... Hned to spadne. Kdyz dam start ani mi nenabehnou WPF a program spadne.

Kdyz z hlavni tridy vymazu Class1 cless = new Class(); Ale to je mi jaksi k prdu...

Porad se to vztahuje k obrazku

 
Nahoru Odpovědět
23.2.2018 22:15
Avatar
Petr Vít
Člen
Avatar
Petr Vít:23.2.2018 22:21

Kdyz vymazu volani objektu Class1 cless = new Class(); z hlavni tridy. Tak to zase funguje normalne

 
Nahoru Odpovědět
23.2.2018 22:21
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Petr Vít
gcx11:23.2.2018 22:21

Myslím, že bys měl mít dříve

InitializeComponents();

a pak až volat tu tvojí třídu

 
Nahoru Odpovědět
23.2.2018 22:21
Avatar
Petr Vít
Člen
Avatar
Petr Vít:23.2.2018 22:29

At tridu volam kdekoliv vysledek je stejny. Pokud ji nezavolam vubec ( nevytvorim vubec objekt) tak to bezi. Pokud ji tam necham a dam Start, tak se zacne plnit pamet a pak to skonči bez jakehokoliv erroru..

Editováno 23.2.2018 22:29
 
Nahoru Odpovědět
23.2.2018 22:29
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Petr Vít
gcx11:23.2.2018 22:29

Důvod je ten, že zbytečně pak vytváříš tu třídu MainWindow znovu v té třídě Class1, přístup na ten atribut můžeš vyřešit předáním parametru this v konstruktoru té Class1.

public partial class MainWindow: Window {

    MtApiClient apiClient = new MtApiClient();
    Class1 cles;
    public MainWindow() {
        InitializeComponents();
        this.cles = Class1(this);
    }
}

A v Class1

class Class1 {
     private MainWindow mainWindow;

     public Class1(MainWindow mainWindow) {
          this.mainWindow = mainWindow;
     }

     public void zkouska() {
         mainWindow.textBox1.text = "Bla";
     }
}

Asi tak nějak by to mělo být a nejspíše to nebude úplně nejlepší řešení.

Editováno 23.2.2018 22:30
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
23.2.2018 22:29
Avatar
Petr Vít
Člen
Avatar
Petr Vít:23.2.2018 22:50

Nevím jestli je nejlepší, ale je funkční ...Používaní this je pro me jeste vyssi divcí.

BTW: pises ze zbytecne vytvarim tridu. Ale dle toho ze to pada to tak delat ani nemuzu ne?

Znamena to že nemuzu Class1 vytvorit objekt v Class2
a v Class2 vytvorit objekt na Class1 ?

 
Nahoru Odpovědět
23.2.2018 22:50
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Petr Vít
gcx11:23.2.2018 23:18

Můžeš, ale pak to nebudeš mít ty samé objekty, tak to nefunguje. Proto musíš předat objekt té jedné třídy

this

do objektu té druhé, abys ho mohl z ní používat.

Editováno 23.2.2018 23:18
 
Nahoru Odpovědět
23.2.2018 23:18
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Petr Vít
ostrozan:23.2.2018 23:20

Ale můžeš, jen ji musíš mít taky public

public class Clas1{
}
 
Nahoru Odpovědět
23.2.2018 23:20
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 11 zpráv z 11.