Diskuze: C# funkce-info
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Vytvoř novou knihovnu, dej tam tento kód a pak do jednotlivých projektů akorát přidáváš reference.
Vlastní knihovna, jak psal Michal
Jinak dvě věci:
1). funkcím se v OOP říká metody, stejně jako se fukcím v C neříká po
asemblerovsku podprogramy/rutiny - není to samoúčelné - funguje to mimo
jiné jako rozlišení "o čem je řeč"
2). tvoje otázka je spíš řečnická - .NET nabízí všechno, co si jen dokážeš představit a ještě víc toho, co si jako začátečník ani předatavit nedokážeš.
Tak jak je popsáno není vhodné dávat do jedné sdílené knihovny.
Je to matlání více prezentačních technologií do jedné knihovny. Takhle se
to nedělá. Pak bys měl
IF console
IF WF
IF WPF
IF WEB
IF MOBILE
a nareferencované všechny assebmlies do sdílené knihovny, což jaksi
popírá její primární funkci. Sdílené knihovny jsou prosty od těchto
věcí, právě proto aby se daly používat samostatně, což znamená co
nejmenší počet závislostí.
Vytunit to samozřejmě jde, ale spíš na úrovni OOP, programování přes rozhraní, DI apod.. S jazykem to nemá nic moc společného. S nějakými nepěkným vedlejšími efekty bys ses potýkal i na jiných platformách. To co chceš je prostě blbě tak nějak systémově.
Pokud bys měl nějakou výraznou společnou část která v tvém kódu je prezentována elementem něco. Potom "něco" by bylo vhodné odvelet to předka který by byl ve nějaké sdílené assembly(tedy v případě .NETu). Následně bys měl N potomků kteří by byly už v jiných projektech, každy jeden pro prezentační technologii - klienta. A v klientovi bys už "jenom" implementoval ty rozdíly které jsou specifické pro každého klienta.
Mě nějak uniká smysl takové funkce...
Původně jsem myslel něco, jako je třeba v C++ #ifdef UNICODE.., žádné složitosti.
Vaše reakce, jsem pochopil tak, že je třeba napsat kód tak, aby byl použitelný v "jakémkoliv" projektu a závislosti související s typem projektu, se řešili v konkrétním projektu. (krkolomně řečeno:) )
To akym sposobom printujes text zalezi od konkretnej technologie. Ked mas nejaky text ktory potrebujes vypisat tak si bud vies spravit jednoduchu triedu ktora bude obsahovat metody/property co vracaju dany text
class Program
{
static void Main(string[] args)
{
Console.WriteLine(PrintMessage.Test);
}
}
public static class PrintMessage
{
public static string Test = "test";
}
Avsak omnoho lepsie by bolo pridat taketo texty napriklad do resource filu. Otvoris properties v projekte, najdes resources tab, pridas novy file. Potom volas len.
static void Main(string[] args)
{
Console.WriteLine(Resources.Test);
}
Jsem to ale hlupák - už jsem myslím pochopil, o co ti jde - a všichni tě tu zbytečně mateme, protože jsme úplně mimo.
to co pořebuješ se jmenuje přetížená metoda, případně přetížený
konstruktor
pokud jsi řádně studoval zdejší tutorial, tak víš o čem je řeč
i když fakt nevím jak zrovna na tvůj příklad udělat přetíženou metodu
pokud by ses spokojil s něčím takovým - to samozřejmě není přetížená metoda - odpovídalo by to tvé univerzální "funkci":
class Vypis
{
public enum Dest{console,msgBox};
private void VypisText(string text, Dest kam)
{
switch(kam)
{
case console: Console.WriteLine(text);break;
case msgBox: MessageBox.Show(text);
}
}
}
Vypis vypis=new Vypis();
//vypis do konzole
vypis.VypisText("ahoj konzole",console);
//vypis do messageBoxu
vypis.VypisText("ahoj messageBoxi",msgBox);
Pokud pomineme fakt, že je ta funkce z hlediska návrhu úplně špatně, tak sdílení kódu se dělá takto:
Máš hotovo. Abys mohl kód používat, musíš pochopitelně přidat
příslušný using.
To ale nemění nic na tom, že kód, který se uvedl, je špatně a neměl bys
to dělat.
Já jsem to blbě napsal, ve skutečnosti jsem to myslel tak, že při sestavení kompilátor rozhodne, kterou část kódu použije (teď chápu, že jsem tam to "if" neměl psát - to bylo zavádějící), ne že ta podmínka bude součástí budoucí aplikace.
Na mou otázku jste už odpověděli, a chápu, že kód musí být navržený jinak (v podstatě standardně - string předám třeba přes referenci v parametru).
Asi myslíš preprocesorové direktivy, C# to samozřejmě má, ale dost
omezené oproti C++
https://msdn.microsoft.com/…d8yd1ha.aspx
Takže jinak
ptáš se na:
řešení ti potom dal czubehead výše
Já osobně typuju b v kombinaci s c
Zobrazeno 17 zpráv z 17.