Avatar
noName
Neregistrovaný
Avatar
noName:
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
Nahoru Odpovědět 28.9.2013 12:06
Nesnáším {}, proto se jim vyhýbám.
Avatar
Benjibs
Člen
Avatar
Nahoru Odpovědět 28.9.2013 12:08
1 + 1 = 2
Avatar
noName
Neregistrovaný
Avatar
noName:

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 noName
Luboš Běhounek (Satik):

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
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na noName
Kit:

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  +1 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:

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
Redaktor
Avatar
Odpovídá na noName
Kit:

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:

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
Redaktor
Avatar
Odpovídá na noName
Kit:

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:

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

 
Nahoru Odpovědět 28.9.2013 13:06
Avatar
Kit
Redaktor
Avatar
Odpovídá na noName
Kit:

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:

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:

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):

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

Nahoru Odpovědět 29.9.2013 11:16
:)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na noName
Jan Vargovský:

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ý
Redaktor
Avatar
Odpovídá na noName
Jan Vargovský:
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
Redaktor
Avatar
Odpovídá na noName
Kit:

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ý
Redaktor
Avatar
Odpovídá na noName
Jan Vargovský:

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:

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:

Děkuji :D

 
Nahoru Odpovědět 29.9.2013 12:00
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na noName
Jan Vargovský:

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

 
Nahoru Odpovědět 29.9.2013 12:03
Avatar
noName
Neregistrovaný
Avatar
noName:
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:

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!");
    }

}

2i - image hosting zdarma

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

[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:

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

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

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
Redaktor
Avatar
Nahoru Odpovědět 29.9.2013 13:41
Zase jsem o něco chytřejší
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
Daniel Vítek:

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
Avatar
Ondrca
Redaktor
Avatar
Odpovídá na Daniel Vítek
Ondrca:

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
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Ondrca
Daniel Vítek:

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

 
Nahoru Odpovědět  +1 29.9.2013 13:49
Avatar
Ondrca
Redaktor
Avatar
Nahoru Odpovědět 29.9.2013 13:50
Zase jsem o něco chytřejší
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Daniel Vítek
noName:

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
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na noName
Daniel Vítek:

A co takhle se zaregistrovat .. ?

 
Nahoru Odpovědět  +2 29.9.2013 14:00
Avatar
noName
Neregistrovaný
Avatar
Odpovídá na Daniel Vítek
noName:

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.