Diskuze: Metoda v metodě v deklaraci třídy?

C# .NET .NET (C# a Visual Basic) Metoda v metodě v deklaraci třídy? American English version English version

Avatar
instanter
Člen
Avatar
instanter:

Zdravím, chci vytvořit třídu pro přístup k lokální db. Mám vytvořenou metodu pro kontrolu existence souboru db a metody pro připojení a odpojení. Můžu teď do těl metod připojení a odpojení vložit metodu kontroly existence souboru jen způsobem if (existuje()==true)? Nebo by bylo lepší to řešit jinak? Rozkopírovat do obou těch metod kód pro kontrolu a metodu odstranit? A následně bych chtěl v jiné třídě použít tu výslednou metodu pro připojení a odpojení z této třídy stejným způsobem. Jdu na to dobře nebo špatně a radši to řešit jinak? Díky za odpovědi.

 
Odpovědět 18.4.2015 19:50
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na instanter
Adam Ježek:

V cem to pises?
Z tveho prispevku sem pochopil jenom ze mas databazi a ze pises do spatnyho vlakna

Nahoru Odpovědět 18.4.2015 19:55
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
instanter
Člen
Avatar
Odpovídá na Adam Ježek
instanter:

v c#, zkoušel jsem sem tam nějaké prográmky různě dát dohromady podle toho, co potřebuju a teď bych chtěl trošku proniknout do oop, ale hned na začátku jsem bohužel narazil na něco, co nikde jen tak není popsáno v základech oop. Takže do volné diskuze.

 
Nahoru Odpovědět 18.4.2015 20:00
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na instanter
Adam Ježek:

Tohle by melo patrit do diskuze C#. A tohle volna rozhodne neni, to sou namety a pripominky k siti.
A nevim, jestli je chyba u me, ale nechapu o co se pokousis, zkus to popsat podrobneji.

Moderatori, presunte to nekdo

Nahoru Odpovědět 18.4.2015 20:07
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
instanter
Člen
Avatar
Odpovídá na Adam Ježek
instanter:
//kontrola existence databáze
       public bool existuje()
       {
           FileInfo databaze = new FileInfo(soubordatabaze);
           if (databaze.Exists)
           {
               return true;
           }
           else
               return false;
       }

       //připojení databáze
       public void pripojitdb()
       {
           if (existuje()==true)
           {
               SqlCeConnection pripojenidb = new SqlCeConnection(pripojovaciretezec);
               pripojenidb.Open();
           }
       }

       //opojení databáze
       public void odpojitdb()
       {
           FileInfo databaze = new FileInfo(soubordatabaze);
           if (databaze.Exists)
           {
               SqlCeConnection odpojenidb = new SqlCeConnection(pripojovaciretezec);
               odpojenidb.Close();
           }
       }

Jedná se mi o to, jestli můžu takhle v této třídě zavést metodu do další metody. A následně vytvořit další třídu, která bude pracovat se slovy a v ní by mimo jiné bylo třeba používat ukládání do db. Jestli je možné potom nějak zase odkázat v další třídě pak na metodu připojit() z této první třídy nebo radši vše kompletně seskupit, i když to bude méně přehledné.

obecně chci říct, zda je možno udělat tohle:

metoda1()
{
....
}
metoda2()
{
metoda1();
...
}

a potom vlastně něco podobného v jiné třídě s tím, že bych odtud použil tu metodu2

 
Nahoru Odpovědět 18.4.2015 20:37
Avatar
Martin Bruna
Člen
Avatar
Odpovídá na instanter
Martin Bruna:

klidně to tak nech doví kdy se ti bude hodit samotna fce existuje(), ale příjde mi hovadina psát

if (existuje()==true)

rovnou muzes napsat

if (existuje())

to == vraci bool

 
Nahoru Odpovědět 18.4.2015 23:36
Avatar
Odpovídá na instanter
sadlomaslox25:

nevim co vlastne chces presne s tema volanima metod. metody si muzes volat z kama chces jake chces ale ridi se to jednak modifikatorem pristupu PUBLIC/PRIVATE/PRO­TECTED/INTERNAL a taky tim jestli je dana metoda instancni nebo oznacena STATIC.

ten kod co si postnul je blbe

public void pripojitdb()
       {
           if (existuje()==true)
           {
               SqlCeConnection pripojenidb = new SqlCeConnection(pripojovaciretezec);
               pripojenidb.Open();
           }
       }

volani existuje je ok ale nemuzes si udelat lokalni promenou pripojenidb a to otevrit a pak opustit tu metodu protoze ta lokalni promena sama zanikne po opusteni te metody, takze se to pripojenidb "samo" a "hned" zavre.

 
Nahoru Odpovědět 19.4.2015 12:25
Avatar
instanter
Člen
Avatar
Odpovídá na sadlomaslox25
instanter:

Modifikátory přístupu mám u všech metod, ale když ji volám, tak už ho nepoužívám a metoda se vztahuje k instanci databáze. Jen nevím, jak to teda udělat, aby připojení bylo aktivní v dobu, kdy ho potřebuju a nemusel bych ho všude rozkopírovávat těsně před kód, který chci pak databází zpracovat.

 
Nahoru Odpovědět 19.4.2015 16:22
Avatar
Martin Bruna
Člen
Avatar
Odpovídá na instanter
Martin Bruna:

Pro začátek bych to upravil takhle

public class DB{
    public static DB Instance = new DB();
    public SqlCeConnection Database;
    public bool existuje()
    {
        FileInfo databaze = new FileInfo(soubordatabaze);
        return databaze.Exists;
    }

    //připojení databáze
    public void pripojitdb()
    {
        if (existuje())
        {
            Database = new SqlCeConnection(pripojovaciretezec);
            Database.Open();
        }
    }

    //opojení databáze
    public void odpojitdb()
    {
           if (Databaze != null)
           {
               Database.Close();
           }
    }
}

máš pak furt přístup k otevřený DB
a pak v kódu

DB.Instance.pripojdb();
SqlCeCommand cmd1 = DB.Instance.Database.CreateCommand();
...
DB.Instance.odpojdb();
 
Nahoru Odpovědět 19.4.2015 16:48
Avatar
instanter
Člen
Avatar
Odpovídá na Martin Bruna
instanter:

Chceš říct, že v definici třídy mám přímo založit instanci?

 
Nahoru Odpovědět 19.4.2015 20:44
Avatar
Martin Bruna
Člen
Avatar
Odpovídá na instanter
Martin Bruna:

Normálně bych to nedělal ale tady se to i celkem hodí podívej se na navrhový vzor Singleton jde vlastne o to že existuje jen jedna instance. Jde to sice trochu proti OOP ale co by to bylo za pravidla kdyby tam nebyli vyjímky :D

 
Nahoru Odpovědět 19.4.2015 21:03
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.