Hirdetés
Új hozzászólás Aktív témák
-
bpx
őstag
osztályokhoz olvasd el ezt: [link]
feladathoz:
class SzovegKezelo
{
string szoveg;
int hossz;
public SzovegKezelo()
{
szoveg = "Hello";
hossz = szoveg.Length;
}
public int SzovegHossz()
{
return hossz;
}
}
class Program
{
static void Main(string[] args)
{
SzovegKezelo szk = new SzovegKezelo();
Console.WriteLine(szk.SzovegHossz());
}
} -
bpx
őstag
először meghívja a 2 paraméteres konstruktort (az ami a this mögött van), utána meg az eredetit amit a példányosításnál hívtál (1 paraméteres)
most így hirtelen nem tudok értelmes gyakorlati példát mondani, de pl. akkor érdemes használni, ha egy osztálynak több konstruktora is van, többféleképp is lehet példányosítani, és a konstruktorok egy bizonyos részig ugyanazt csinálják
ekkor érdemes kivenni ezt a közös részt külön, és ahelyett hogy többször kellene ugyanazt leírni, elég csak a : this-el hivatkozni ráde egyébként ez le sem fordul, mert a 10.0 az double
[ Szerkesztve ]
-
bpx
őstag
adott az alábbi kód/osztályok:
abstract class UdpTransportManager
{
...
public static UdpTransportManager LookUp(UdpChannelListener<IChannel> channelListener)
{ ... }
....
}
public class UdpChannelListener<TChannel> : ChannelListenerBase<TChannel> where TChannel : class, IChannel
{
...
protected override void OnOpen(TimeSpan timeout)
{
...
UdpTransportManager transportManager = UdpTransportManager.LookUp(this);
...
}
...
}na most itt a LookUp hívásakor, nekem azt mondja, hogy a TChannel-t nem tudja IChannel-re konvertálni
ezzel most így mit lehet kezdeni/hol a hiba?explicit kasztolással nyilván lefordul, de úgy nem működik
[ Szerkesztve ]
-
bpx
őstag
válasz ArchElf #1060 üzenetére
a működés logikája az helyes, template nélkül működik rendesen
ez inkább szintaktikai kérdés
amit nem értek, hogy a ChannelListenernél a TChannel-re meg van adva hogy az egy class, IChannel, akkor ha paraméterként átadom a példányt, akkor miért kapok olyan hibaüzenetet, hogy a TChannelt nem tudja IChannelre konvertálni -
bpx
őstag
ne a TextChanged event-et használd, hanem a KeyPress-t
annak van KeyPressEventArgs e argumentuma, ahol az e.KeyChar-ral megkapod hogy mi volt a lenyomott karakter (csak valós karakterekre működik, char típust ad vissza, neked kell belőle Key-t "varázsolni" - ha ctrl,alt,shift, stb vezérlőkarakterek is kellenek, akkor KeyDown/KeyUp eventek, és e.KeyData) -
bpx
őstag
én csak azt láttam, hogy az eventben, amit használtál nem lehet kideríteni, hogy melyik billentyűt nyomták le
hogy hogyan lehet char-ból virtuális key-t csinálni? az jó kérdés, ezt a részt nem ismerem annyira, lehet hogy van vmi pofonegyszerű megoldás .NET-ben, amiről nem tudok
lehet pl. olyat, hogy csinálsz egy asszociatív adatszerkezetet (Dictionary, HashTable, ami épp tetszik), amiben előre eltárolod a konstansokat, és a kapott char-ral címzed
-
bpx
őstag
válasz Vasinger! #1162 üzenetére
1. beolvasás Console.ReadLine()-nal
stringeken működik a + operátor, azzal össze lehet fűzni őket2. pl. egy ciklussal végigmész a karaktereken egyesével (a string-et lehet indexelni, ami egy karaktert ad vissza - szoveg[0]), és ha szóköz, akkor törlöd (string.Remove())
végén meg string.Length megadja a string hosszát3. megkeresed az utolsó szóközt (string.LastIndexOf(' '), így a dupla vezetéknevekre is működik), és a string utána levő részét veszed (string.SubString())
[ Szerkesztve ]
-
bpx
őstag
válasz Vasinger! #1164 üzenetére
1.
string nev ="Dr. " + Console.Readline();2.
string szoveg = Console.ReadLine();
for (int i = 0; i < szoveg.Length; )
{
if (szoveg[i] == ' ')
{
szoveg = szoveg.Remove(i, 1);
continue;
}
i++;
}
Console.WriteLine("{0} karakter", szoveg.Length);3.
string nev = Console.ReadLine();
nev = nev.Substring(nev.LastIndexOf(' ') + 1); -
bpx
őstag
válasz Vasinger! #1167 üzenetére
ezügyben már írtál ide egyszer^^
beírod a szöveget, a program feldolgozza, kiírja az eredményt, majd kilép, mert nincs más dolga - ez olyan gyorsan történik, hogy nem látsz belőle semmit, csak azt hogy kilép- indíthatod debug nélkül (Ctrl + F5), és akkor a végén még vár egy bármilyen billentyűleütésre
- vagy beírsz a program legvégére egy Console.Readline()-t és akkor még vár egy enterre mielőtt kilépne[ Szerkesztve ]
-
bpx
őstag
válasz Briganti #1198 üzenetére
szerintem arra gondolt, hogy a query stringet hivatalosan nem így szokás "összeollózni" változóbehelyettesítéssel, hanem van egy kész query stringed, amiben jelölöd hogy mik a paraméterek, majd a megfelelő függvényekkel megadod, hogy melyik paraméter helyére melyik változót értéke kerüljön (ami azért jobb így, mert le lesz ellenőrizve, hogy mi kerül oda, és ezáltal véd az sql-injection ellen)
no meg valamennyire olvashatóbb is lesz szerintem
[ Szerkesztve ]
-
bpx
őstag
válasz Vasinger! #1207 üzenetére
i változó totál felesleges, nem is használja semmi, és ebben a formában az IndexOf a "0,1" string-et keresi, aminek hát semmi értelme...
string s2 = s[0].ToString().ToUpper() + s.Substring(1);
veszi az első karaktert amit nagybetűsre cserél, majd a maradékot érintetlenül
-
-
bpx
őstag
válasz ArchElf #1299 üzenetére
nem is kellettek ide napok
bme msdnaa -
bpx
őstag
nem a legszebb, de legalább rövid
// 1. feladat
int tav;
Console.Write("Tavolsag mm-ben: ");
int.TryParse(Console.ReadLine(), out tav);
Console.WriteLine("{0} m, {1} cm, {2} mm", tav/100.0, tav/10.0, tav);
// 2. feladat
string mgh = "aáeéiíoóöőuúüű";
Console.Write("Gyumolcs: ");
string gyum = Console.ReadLine();
Console.WriteLine(mgh.Contains(gyum[0].ToString().ToLower()) ? "maganhangzo" : "massalhangzo");
// 3. feladat
for (int i = 12; i < 256; i++)
Console.Write("{0}: {1}\t", i, (char)i);
Console.WriteLine(); -
bpx
őstag
igen, nyilván úgy kell
pl. 1. feladathoz 1 textbox amibe majd a 'mm' értéket lehet írni, mellé egy gomb, alá meg 2 másik textbox-
gomb eseménykezelőjébe (dupla klikk a gombon a szerkesztéshez) pedig:textBox2.Text = (Int32.Parse(textBox1.Text) / 1000.0).ToString();
textBox3.Text = (Int32.Parse(textBox1.Text) / 10.0).ToString();2. feladat
megint egy textbox + gomb, ennek az eseménykezelőjébe:
string mgh = "aáeéiíoóöőuúüű";
string gyum = textBox4.Text;
MessageBox.Show(mgh.Contains(gyum[0].ToString().ToLower()) ? "maganhangzo" : "massalhangzo");(messageboxban dobja fel a választ)
3. feladat
leraksz mondjuk egy listbox-ot, és a form Load eseményébe (duplaklikk a formon a szerkesztéshez):
for (int i = 12; i < 256; i++)
listBox1.Items.Add(i + ":\t" + (char)i);aztán lehet ezt még kozmetikázni, pl. a texboxok mellé label, hogy mit kell beírni/mi lesz ott, gombok szövegének átírása, 1. feladatban a 2 "kimeneti" textbox szerkesztésének letiltása, stb...
-
bpx
őstag
-
bpx
őstag
van az ADO.NET, ami nagyon röviden kb. annyi, hogy összeraksz egy SQL utasítást, és azt végrehajtod (vagy tárolt eljárást hívsz vele, stb.) (Java világból a JDBC-hez hasonlít)
ha pl. lekérdezés volt, kapsz egy eredményhalmazt, amiből ki lehet bányászni a dolgokat
példavagy ott a LinQ, aminél az adatbázistáblákat (sorokat) le lehet képezni objektumokká (és vissza), és magukon az objektumokon lehet programkódból egy SQL-hez nagyon hasonló szintaktikával mindenféle dolgot végrehajtani, de ehhez sztem többet kell olvasni, nem elég egy egyszerű példa [link]
-
bpx
őstag
válasz Vasinger! #1548 üzenetére
azt azért jó lenne tudni, hogy pontosan milyen formában jöhet a bemenet, mert a leírásnál arról szó sem volt, hogy a vezetéknévben "space-ek is lehetnek", csak úgy közben derült ki (van még más meglepetés is esetleg? )
illetve a példa amit írtál, nem illeszkedik a leírásra (2 felesleges szóköz)egyébként én inkább splittel szavakra bontanám, minthogy a substring/indexof kombóval szenvedjek
[ Szerkesztve ]
-
bpx
őstag
válasz Vasinger! #1551 üzenetére
static void Main(string[] args)
{
int i;
string s = "K ov ác s Kálmán, 9999 Budapest, Rigó út 41.";
// a bemenet három részre bontható, melyeket a ", " karaktersorozat (1 vessző és 1 space) határol
string[] ss = s.Split(new string[] { ", " }, StringSplitOptions.None);
// első rész: vezetéknév + keresztnév
// feltesszük hogy a keresztnév egyben van, tehát az utolsó space után jön, így azt kell keresni
i = ss[0].LastIndexOf(' ');
// vezetéknév, space-eket kicseréli üres stringre, nagybetűs
Console.WriteLine(ss[0].Substring(0, i).Replace(" ", "").ToUpper());
// keresztnév, nagybetűs
Console.WriteLine(ss[0].Substring(i + 1).ToUpper());
// középső rész: irányítószám város (közöttük szóköz)
string[] cim1 = ss[1].Split(' ');
Console.WriteLine("{0} {1}", cim1[0], cim1[1]);
// utolsó rész, három részből áll: név típus házszám.
// felbontható három részre, a középső rész figyelmen kívül hagyható, helyette UTCA írható
string[] cim2 = ss[2].Split(' ');
Console.WriteLine("{0} UTCA {1}", cim2[0].ToUpper(), cim2[2]);
}mivel nincs valami pontosan specifikálva a feladat, a minimumra törekedtem, csak azt csináltam meg, amit említettél, és csak olyan bemenetre működik, amit példaként írtál (space lehet a vezetéknévben)
minimális változás a bemeneten, és már nem is működik, legyen vele valami dolgod neked is
(gondolok itt ilyenre pl. hogy vessző után nincs space, vagy az utca neve több tagból áll, pl. Petőfi Sándor utca 1.) -
bpx
őstag
hogyne lenne olyan connectionstring
SqlConnection-nél valóban nincs Provider, de OleDb-hez nem is SqlConnection kell
SqlConnection helyett OleDbConnection kell, és a többiből is Sql____ helyet OleDb____ osztályok kellenekez például tökéletesen lefut (csak ezt a részt piszkáltam, kicsit egyszerűsítettem + sűrítettem; de legalább produkál valami primitív működést )
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\adatok.mdb";
try
{
OleDbCommand command = new OleDbCommand("select termekneve from termekek where termekazonosito between 1 and 5", con);
con.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read()) { MessageBox.Show(reader[0].ToString()); }
reader.Close();
}
catch (Exception ex) { MessageBox.Show("hiba: " + ex.Message); }
finally { con.Close(); }viszont ehhez az adapteres mókához abszolút nem értek (és megtanulni sincs kedvem most, mert nemsokára lejár a munkaidő és indulok haza ), azt majd valaki még megmondja neked, hogy hogyan kell
[ Szerkesztve ]
-
bpx
őstag
tessék, semmi double, char, semmi konverzió, de még indexof/substring se, mert ugye nem szabad/nem tanultátok...
lehet ezt csűrni-csavarni, meg a tanár hülyeségéhez ragaszkodni, és lesz egy ilyen förtelem belőle, inkább el se magyarázom, mert még elrettentő példának is sok és leírni is fájt :static void Main(string[] args)
{
Console.WriteLine("Kérem adjon meg 3 számot 1-5 között, vesszővel elválasztva: ");
string szamok = Console.ReadLine();
Console.WriteLine("Átlag: {0}", (szamok[0] + szamok[2] + szamok[4] - 144) / 3);
Console.ReadLine();
}hozzászólásaitok alapján többet tanulhattok az itteniektől, mint attól a tanártól valaha fogtok
-
bpx
őstag
ma egy ~2 órás kínlódás után saját káromon megtanultam, hogy C#-ban a struct nem threadsafe, még szinkronizációval sem, sajátos működési elvéből adódóan
persze mikor már nagyon gyanús volt a dolog, rákerestem neten, aztán rögtön felvilágosodtam ...gondoltam egyszerűsítek és class helyett structot csinálok, mert csak pár változó összerakása volt a cél egy struktúrába mindenféle függvény nélkül, hát helyette jól megszivattam magam...
-
bpx
őstag
válasz Gregorius #1622 üzenetére
igen, erről is olvastam
csak átmenetileg oldotta meg a problémát, közben ugyanúgy megszívtam class-szal isúgyhogy segítséget kérnék
adott a következő szituáció:
IIS-en fut egy WCF szolgáltatás, amivel Silverlight kliensek kommunikálnak duplex módon
(silverlightos sakk, emberek belépnek a szerverre, majd egymás ellen tudnak játszani) - de ez lényegtelen, a konkurenciával van a gond
(azt szeretném észlelni, amikor meghal egy kliens, hogy a másik játékos ne csak üljön és várjon a semmire, hanem tudjam jelezni neki)
az ötlet a következőa szolgáltatásban van egy
static List<ClientInfo> clients;
private static readonly object syncLock = new object();ahol
public class ClientInfo
{
public string name; // játékos neve
public IChessClient client; // callback channel referencia
public DateTime lastreply; // utoljára mikor jött tőle válasz
}amikor a kliens hív a szerveren egy Login()-t, az csinál neki egy ClientInfo objektumot, és beteszi a listába
a szolgáltatás statikus konstruktorában csinálok 2 threadet:
- az egyik pl. 20 mp-ként küld egy kérést a klienseknek (PingRequest())
ezekre 1-2 mp múlva jön egy aszinkron válasz, mégpedig úgy, hogy a kliensek meghívják a szolgáltatás PingReply() fv-ét, ami bejegyzi a fenti listába, hogy most ebben az időpontban jött utoljára válasz adott klienstől- a másik meg pl. 60 mp-ként ellenőrzi a fenti clients listát, hogy kik azok, akik már mondjuk 2 perce nem válaszoltak
ezeket törli a clients listából, az ellenfelüket meg (ha van) értesítiahányszor hozzáférek a clients listához, mindig lock(syncLock)-ot használok a kölcsönös kizárás miatt
tehát 3 fő thread van (végrehajtó, "pingelő", ellenőrző)
a "végrehajtó" (Login(), PingReply()) csak ír
a "pingelő" csak olvas, és mindig helyes értéket lát
a probléma az ellenőrző threaddel van, ez olvassa és módosítja is a clients listátha csak 1 kliens van bejelentkezve, akkor minden megy rendben
ha több, akkor 1 db kliensnél nem látja a ClientInfo.lastreply aktuális értékét, hanem csak a létrehozáskori értéket (Login()) látja - viszont az összes többi kliensnél látja a friss értékeket
ez az 1 db ugye nem frissül, ha letelik X perc, a szerver úgy veszi hogy halott, törli
ilyenkor megint lesz 1 db másik, akinél nem látja az ezután érkező friss értékeket, őt is kiszórja
és ez így megy tovább, egyesével kiszór mindenkit amíg csak 1 játékos marad az egész szerveren, úgy hogy közben mindenki szépen válaszolt és folyamatosan volt kommunikáció, "ping"-re is jöttek válaszokha esetleg valaki eljutott volna idáig az olvasásban (), [link] van kód is, csupaszítva, csak a lényeget meghagyva
-
bpx
őstag
válasz Gregorius #1627 üzenetére
"Akár úgy, hogy egy extra metódushívást beleiktatsz a kontraktba, ami periodikusan küld egy dummy üzenetet"
igen, a PingRequest()/PingReply() kb. ezt csinálja
"A kódhoz kellene még a konfig is. Nagyon sok mindent jobbá lehet tenni vagy katasztrofálisan el lehet rontani egy WCF szolgáltatás konfigurációjával."
az a gond, hogy Silverlight vs. IIS duplex kommunikáció van (amit hát mégegyszer nem biztos, hogy így csinálnék, de most már ez van...), tehát muszáj pollingduplexhttpbinding-et használni (vagy még nettcpbinding-ot lehetne, de szerintem az én esetemben a clients lista konkurrens hozzáférésével lesz valami gond, nem a szolgáltatás konfigurációjával)
egyébként itt a konfig, semmi extra nincs benne (maxOutputDelay="00:00:01" - a kliens 1 mp-enként pollozzon, hogy jött-e neki üzenet)"Az mindenesetre már látszik, hogy ha void aszinkron hívásokat akarsz csinálni, akkor ajánlott az interfészen az OperationContract-ban megjelölni IsOneWay=true-ként és akkor nem kell külön szálat indítani minden ilyen híváshoz."
na ez egy érdekes dolog, ezt így is a csináltam, a kliens (callback channel) összes metódusa
[OperationContract(IsOneWay=true)]
void ... (...)alakú
ha nem így csináltam, akkor amikor a klienshez hozzáadtam a referenciát a szolgáltatáshoz (és feldolgozta a wsdl-t és generálta a megfelelő dolgokat), akkor dobott is egy warning-ot hogy ez így nem fog működni Silverlighttal - tehát ez megvan
ennek ellenére, ha szerver oldalon hívok egy ilyen függvényt, és közben már nincs is kliens - akkor ha lejár a bindingban megadott timeout (2 perc, default 1 perc) kivételt dob, sőt addig a 2 percig még blokkol is (ezért indítottam még ennek is külön threadet és raktam try..catch blokkba
[ Szerkesztve ]
-
bpx
őstag
válasz Gregorius #1629 üzenetére
ez se oldotta meg - de az InstanceContext hasznos volt, nem kellenek statikus tagok, stb
közben próbálkoztam még pár dologgal, szálakat/listát máshogy szervezni, timeout-okkal játszani, de sehogy sem tökéletesjövő hét szerdán leadás, meg doksit is kellene írni hozzá, szóval lehet ez kimarad belőle
-
bpx
őstag
az alkalmazásokhoz létre lehet (illetve van, ahol kell) hozni XML formátumú konfigurációs fájlokat (app.config, web.config, stb.), ami több okból is jó, pl. a program változtatása/újrafordítása nélkül is lehet befolyásolni a működését
ezt a ConfigurationManager osztállyal lehet könnyen feldolgozni
amit leírtál, az a konfig fájlból a megadott nevű ("vp.Properties.....") connectionstring XML elemre hivatkozik, és annak a connectionstring attribútumát adja vissza(#1631) Gregorius:
[link] (1.1MB a sok sallang miatt)
ha fordítani is szeretnéd, akkor kell pár dolog:
- VS2010 + .NET 4.0
- Silverlight 4 SDK
- Silverlight 4 Tools
- adatbázist (chess.bak) visszaállítani Management Studio-val (Sql Server 2008 Express)[ Szerkesztve ]
-
bpx
őstag
válasz Gregorius #1635 üzenetére
az már a csütörtök délelőtti gányolásom eredménye, azóta nem foglalkoztam vele
akkor írtam át, hogy ClientInfo helyett csak a callback channel referenciát tárolja, meg az ellenőrzést is máshogy csinálja (a játékos nevét eleve nem használta semmire, a dátum meg pont az új ellenőrzés miatt nem kell)
az ellenőrző thread csak ott maradt egyelőre, de el se indítom, szóval simán lehet, hogy helytelen, de az nem futigen a foreach-es dolog is előjött, elején ott is van alatta kommentben, hogy hogyan lenne érdemes
a tanácsokat köszönöm
az a baj, hogy közel a határidő, és van egy csomó más dolog, amivel foglalkozni kellene
úgy vagyok már vele, hogy bemutatom ezt a részt kihagyva, úgy legalább működik a játék többi funkciója + nem hal szét random módon a kapcsolat, aztán le van tudva a tárgy legalább...
szerettem volna több dolgot is megvalósítani, de szvsz ez a Silverlight-WCF kombó elég nagy melléfogás lett, sokkal egyszerűbb lett volna vmi (n+1). webes portált csinálni, mint a többiek nagy része, amit összekattintgat az ember 1 nap alatt
szóvalt ezt normálisan legfeljebb önszorgalomból fogom valamikor, ha már felvet a sok szabadidő
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Sigma 150-600mm Sports objektív + táska ( Nikon )
- Nintendo Switch Oled / Farming Simulator Játékkal / Dokkolókkal / 12 hónap jótálással
- Samsung Galaxy S23 Ultra 12/512GB, Megkímélt, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Eladó Nintendo Switch V2 rengetek kiegészítővel + eladó játékok
- DARTH MALAK GAMING PC // Core i7 930 // 8GB DDR3 // SSD+HDD // MSI GeForce GTX770 Twin Frozr 2GB
Állásajánlatok
Cég: HC Pointer Kft.
Város: Pécs
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest