Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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
noName
Neregistrovaný
Avatar
noName:28.9.2013 12:02
public partial class Class1 : Form
    {
        public Class1()
        {
        }

        private string jmeno = "Pavel";

        protected void Pozdrav()
        {
            MessageBox.Show(string.Format("Ahoj {0}", jmeno));
        }
    }

    public partial class Form1 : Class1
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Pozdrav();
        }
    }
 
Odpovědět
28.9.2013 12:02
Avatar
Odpovídá na
Michal Žůrek - misaz:28.9.2013 12:06

A co s tím?

 
Nahoru Odpovědět
28.9.2013 12:06
Avatar
Benjibs
Člen
Avatar
Odpovídá na Michal Žůrek - misaz
Benjibs:28.9.2013 12:08

Učí sa písať príspevky ]:> :O

Nahoru Odpovědět
28.9.2013 12:08
1 + 1 = 2
Avatar
noName
Neregistrovaný
Avatar
noName:28.9.2013 12:12

Zdravím. Chci se zeptat, zda jsem správně pochopil princip dědičnosti.

 
Nahoru Odpovědět
28.9.2013 12:12
Avatar
Odpovídá na
Luboš Běhounek Satik:28.9.2013 12:14

To podle tohohle malého kousku nepoznáme, ale vypadá to na první pohled funkčně, jen název třídy Class1 není moc vypovídající :)

Nahoru Odpovědět
28.9.2013 12:14
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:28.9.2013 12:16

Podle názvů tříd soudím, že jsi dědičnost nepochopil. Podle obsahů tříd zase že jsi nepochopil OOP. Zkus si vymyslet nějaký jiný příklad, třeba se zvířaty v ZOO.

Nahoru Odpovědět
28.9.2013 12:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
noName
Neregistrovaný
Avatar
noName:28.9.2013 12:17

To je jen ukázka... Měl by z toho vyplynout princip dědičnosti :D

 
Nahoru Odpovědět
28.9.2013 12:17
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:28.9.2013 12:20

Netuším, proč by třída Form1 měla být potomkem třídy Class1. Co je to Form1? Co je to Class1? Tyto třídy neznám.

Nahoru Odpovědět
28.9.2013 12:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
noName
Neregistrovaný
Avatar
noName:28.9.2013 12:24

Tak to je jen příklad, nic konkrétního. Chtěl jsem tím dokázat, že volám protected metodu z Class1 ve Form1.

 
Nahoru Odpovědět
28.9.2013 12:24
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:28.9.2013 12:36

Nedokázal jsi nic. Jen jsi napsal pár nesmyslných příkazů, které nijak nesouvisí s realitou a tedy ani s OOP.

Nahoru Odpovědět
28.9.2013 12:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
noName
Neregistrovaný
Avatar
noName:28.9.2013 13:06

Ale já chtěl demonstrovat dědění metody, což se povedlo.

 
Nahoru Odpovědět
28.9.2013 13:06
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:28.9.2013 13:07

Nepovedlo. Znovu a lépe.

Nahoru Odpovědět
28.9.2013 13:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
noName
Neregistrovaný
Avatar
noName:29.9.2013 10:42

Tak jsem to zkusil znovu. Tentokrát jsem si udělal přihlašovací formulář, který obsahuje 2x textBox (accountName, accountPassword) a 2x button (user, admin) Po kliknutí na jedno z tlačítek by měl program vypsat v MessageBoxu Name a Password. Jenže nevypíše. Můžete se na to někdo mrknout prosím? Předem děkuji.

PROJECT
http://uloz.to/…edicnost-rar

 
Nahoru Odpovědět
29.9.2013 10:42
Avatar
noName
Neregistrovaný
Avatar
noName:29.9.2013 10:44

Zde je CODE, ale mrkněte raději na celý projekt, zda jsou nastaveny správně modifikátory u textBoxů a tlačítek.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Dědičnost
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void user_Click(object sender, EventArgs e)
        {
            User newUser = new User();
        }

        private void admin_Click(object sender, EventArgs e)
        {
            Admin newAdmin = new Admin();
        }
    }
    // ///////////////////////////////////
    public partial class Account : Form1
    {
        private string name;
        private string password;

        protected void Loggin()
        {
            name = accountName.Text;
            password = accountPassword.Text;
            MessageBox.Show(String.Format("Ahoj {0}. Tvé heslo je {1}.", name, password));
        }
    }
    // //////////////////////////////////
    public partial class User : Account
    {
        public User()
        {
            Loggin();
        }
    }
    // /////////////////////////////////
    public partial class Admin : Account
    {
        public Admin()
        {
            Loggin();
        }
    }
}
 
Nahoru Odpovědět
29.9.2013 10:44
Avatar
Luboš Běhounek Satik:29.9.2013 11:16

V namespace nepoužívej diakritiku. Proč všechny třídy dědí od Formu?

Nahoru Odpovědět
29.9.2013 11:16
https://www.facebook.com/peasantsandcastles/
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:29.9.2013 11:22

Očividně nevíš co dělá slovo partial a vypsat by ti to mělo prázdné stringy, protože nepracuješ s tou instancí formu, která je jakoby ta hlavní, ale s další (novou). Jak už řekl Satik, tak to dědění formu taky nechápu - naco?

Editováno 29.9.2013 11:22
 
Nahoru Odpovědět
29.9.2013 11:22
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:29.9.2013 11:36
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void user_Click(object sender, EventArgs e)
        {
            Account newUser = new User(accountName.Text, accountPassword.Text);
            newUser.Loggin();
        }

        private void admin_Click(object sender, EventArgs e)
        {
            Account newAdmin = new Admin(accountName.Text, accountPassword.Text);
            newAdmin.Loggin();
        }
    }
    public abstract class Account
    {
        protected string name;
        protected string password;

        public Account(string name, string pw)
        {
            this.name = name;
            password = pw;
        }

        public virtual void Loggin()
        {
            MessageBox.Show(String.Format("Ahoj {0}. Tvé heslo je {1}.", name, password));
        }
    }
    public class User : Account
    {
        public User(string name, string pw)
            : base(name, pw)
        { }

        public override void Loggin()
        {
            MessageBox.Show(String.Format("Ahoj uživateli {0}. Tvé heslo je {1}.", name, password));
        }
    }
    public class Admin : Account
    {
        public Admin(string name, string pw)
            : base(name, pw)
        { }

        public override void Loggin()
        {
            MessageBox.Show(String.Format("Ahoj admine {0}. Tvé heslo je {1}.", name, password));
        }
    }
 
Nahoru Odpovědět
29.9.2013 11:36
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:29.9.2013 11:36

Konstruktory ve třídách User a Admin jsou zcela zbytečné. Stačí ve třídě Account metodu Loggin přejmenovat na Account a je to.

V metodě user_Click() vytvoříš objekt newUser a hned ho zahodíš. Proč?

Nahoru Odpovědět
29.9.2013 11:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:29.9.2013 11:46

Jo teď se ještě dívám na ty modifikátory těch textboxů. Rychle se to odnauč, to je snad největší prasárna jakou znám.

Pro všechny: nenastavujte nikdy control (textbox, label, button...) na public!!! Když už potřebujete něco z něj zjistit, udělejte si getter na tu danou vlastnost co potřebujete, ale rozhodně jí nedávejte na public.

 
Nahoru Odpovědět
29.9.2013 11:46
Avatar
noName
Neregistrovaný
Avatar
noName:29.9.2013 11:57

A můžete mi někdo poradit, jak to mám vyřešit? Už dva dny si nad tím lámu hlavu.

 
Nahoru Odpovědět
29.9.2013 11:57
Avatar
noName
Neregistrovaný
Avatar
noName:29.9.2013 12:00

Děkuji :D

 
Nahoru Odpovědět
29.9.2013 12:00
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:29.9.2013 12:03

Více se koukej, méně piš :)

 
Nahoru Odpovědět
29.9.2013 12:03
Avatar
noName
Neregistrovaný
Avatar
noName:29.9.2013 12:37
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Dědičnost
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // click USER:
        private void user_Click(object sender, EventArgs e)
        {
            Account newUser = new User(accountName.Text, accountPassword.Text);
            newUser.Loggin();
        }
        // click ADMIN:
        private void admin_Click(object sender, EventArgs e)
        {
            Account newAdmin = new Admin(accountName.Text, accountPassword.Text);
            newAdmin.Loggin();
        }
    }
    // ACCOUNT class:
    public abstract class Account
    {
        protected string name;
        protected string password;

        public Account(string name, string password)
        {
            this.name = name;
            this.password = password;
        }

        public virtual void Loggin()
        {
        }
    }
    // USER class:
    public class User : Account
    {
        public User(string name, string password): base(name, password)
        {}
        public override void Loggin()
        {
            MessageBox.Show(String.Format("Ahoj uživateli {0}. Tvé heslo je {1}.", name, password));
        }
    }
    // ADMIN class:
    public class Admin : Account
    {
        public Admin(string name, string password): base(name, password)
        {}
        public override void Loggin()
        {
            MessageBox.Show(String.Format("Ahoj admine {0}. Tvé heslo je {1}.", name, password));
        }
    }
}

Takže zde se využije dědičnost i polymorfismus? Jestli jsem to správně pochopil, tak polymorfismus využíváme zde:

public virtual void Loggin()
        {
        }
public override void Loggin()
        {
            MessageBox.Show(String.Format("Ahoj uživateli {0}. Tvé heslo je {1}.", name, password));
        }
 
Nahoru Odpovědět
29.9.2013 12:37
Avatar
noName
Neregistrovaný
Avatar
noName:29.9.2013 13:26

Tak naposled:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void loggin_Click(object sender, EventArgs e)
    {
        if(user.Checked)
        {
            Account newUser = new User(accountName.Text, accountPassword.Text);
            newUser.Loggin();
        }
        else if(admin.Checked)
        {
        Account newAdmin = new Admin(accountName.Text, accountPassword.Text);
        newAdmin.Loggin();
        }
    }
}
// ACCOUNT class:
public abstract class Account
{
    protected string name;
    protected string password;

    public Account(string name, string password)
    {
        this.name = name;
        this.password = password;
    }

    public virtual void Loggin()
    {
        // polymorfismus
    }
}
// USER class:
public class User : Account
{
    public User(string name, string password): base(name, password)
    {}
    // přepsání metody:
    public override void Loggin()
    {
        MessageBox.Show(String.Format("Ahoj uživateli {0}. Tvé heslo je {1}.", name, password));
    }
}
// ADMIN class:
public class Admin : Account
{
    public Admin(string name, string password): base(name, password)
    {}
    // přepsání metody:
    public override void Loggin()
    {
        if ((name == "admin") && (password == "heslo"))
        {
            MessageBox.Show(String.Format("Ahoj admine {0}. Tvé heslo je {1}.", name, password));
        }
        else
            MessageBox.Show("Zadal jste špatné přihlašovací údaje nebo nejste admin!");
    }

}

<a href="http://­2i.cz/d8f594be­6d" target="_blank"> 2i - image hosting zdarma</a>

 
Nahoru Odpovědět
29.9.2013 13:26
Avatar
noName
Neregistrovaný
Avatar
noName:29.9.2013 13:27

[url=http://2i­.cz/d8f594be6d] [img]http://2i­.cz/2i/t/d8f594be6d­.jpg[/img] [/url]

 
Nahoru Odpovědět
29.9.2013 13:27
Avatar
noName
Neregistrovaný
Avatar
noName:29.9.2013 13:28

OMG jak se sem dávají obrázky :D

 
Nahoru Odpovědět
29.9.2013 13:28
Avatar
Odpovídá na
Libor Šimo (libcosenior):29.9.2013 13:39

Skúsim to.
<img src="http://2­i.cz/d8f594be­6d] [img]http://2i­.cz/2i/t/d8f594be6d­.jpg" alt="email" />
Edit.
Nefunguje to takto.

Editováno 29.9.2013 13:40
Nahoru Odpovědět
29.9.2013 13:39
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Ondrca
Tvůrce
Avatar
Ondrca:29.9.2013 13:41

Co takhle:
http://2i.cz/d8f594be6d
?

Nahoru Odpovědět
29.9.2013 13:41
Zase jsem o něco chytřejší
Avatar
Odpovídá na Libor Šimo (libcosenior)
Neaktivní uživatel:29.9.2013 13:42

A co takhle kliknout na Zvolit soubory pod polem pro vkládání komentářů ? :O

EDIT: sdraco, už chápu proč sem zakazuješ přístup malým dětem...

Editováno 29.9.2013 13:44
Nahoru Odpovědět
29.9.2013 13:42
Neaktivní uživatelský účet
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Ondrca:29.9.2013 13:44

libco ten soubor nemá, on ho sem chtěl dát za NoName, ne?

Nahoru Odpovědět
29.9.2013 13:44
Zase jsem o něco chytřejší
Avatar
Odpovídá na Ondrca
Neaktivní uživatel:29.9.2013 13:49

To já nevím, jen říkám jak se sem nahrávají obrázky...

Nahoru Odpovědět
29.9.2013 13:49
Neaktivní uživatelský účet
Avatar
Ondrca
Tvůrce
Avatar
Nahoru Odpovědět
29.9.2013 13:50
Zase jsem o něco chytřejší
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Neaktivní uživatel
noName:29.9.2013 13:59

Až na to, že když nejsem registrovaný, tak nemohu přidávat obrázky. :D

 
Nahoru Odpovědět
29.9.2013 13:59
Avatar
Odpovídá na
Neaktivní uživatel:29.9.2013 14:00

A co takhle se zaregistrovat .. ?

Nahoru Odpovědět
29.9.2013 14:00
Neaktivní uživatelský účet
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Neaktivní uživatel
noName:29.9.2013 14:26

Regnu. Jen jsem reagoval na:
"A co takhle kliknout na Zvolit soubory pod polem pro vkládání komentářů ?EDIT: sdraco, už chápu proč sem zakazuješ přístup malým dětem..."

Takže 1) já tam možnost Zvolit soubory nemám 2) nejsem dítě.

A co se týče mých chyb, tak C# studuji asi měsíc. Předtím jsem programoval mikrokontroléry v klasickým C a tam je to něco úplně jiného (přiřazuješ registrům různé hodnoty)

 
Nahoru Odpovědět
29.9.2013 14:26
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 35 zpráv z 35.