Anonymní profil Astronaut – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Astronaut – Programujte.comAnonymní profil Astronaut – Programujte.com

 

Příspěvky odeslané z IP adresy 88.212.36.–

Kovboj
.NET › Co je lepsi?
11. 12. 2011   #151113

Ak mas vela vlastnosti, ktore zadavas - aj ked je to viacej kodu, ja by som preferoval druhy zapis pred prvym. Pri krokovani vies dat v prvom pripade breakpoint len na "cely" riadok a v pripade chyby ti to zastavi na celom zapise, nie na konkretnej chybe. Napr. ak mapujes struktury z jedneho zdroja do ineho a zdochne to s "Object reference not set..." tak musis hladat manualne kde to kape. Ak pouzijes druhy zapis, zastavi to na konkretnom riadku, kde problem je.

Prve riesenie pri malych strukturach sa mi ale zda elegantnejsie.

Astronaut
.NET › Genericita a typeof operátor
7. 11. 2011   #149696

Checel by som poznamenat, ze implementacia interface a dedenie z triedy je o trosku odlisne (tam si treba popytat zoznam interfacov a tie potom porovnavat ako bolo navrhovane).

using System;
using System.Windows;

namespace WpfApplication14
{
	public interface IRozhranie<T> { }
	public class PriamaImplementacia : IRozhranie<int> { }
	public class DedenaImplementacia : PriamaImplementacia { }

	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			InitializeComponent();
		}

		private void Button_Click(object sender, RoutedEventArgs e)
		{
			MessageBox.Show("DedenaImplementacia -> ICloneable = " + IsDerivedFrom(new DedenaImplementacia(), typeof(ICloneable)).ToString());
			MessageBox.Show("PriamaImplementacia -> IRozhranie = " + IsDerivedFrom(new PriamaImplementacia(), typeof(IRozhranie<>)).ToString());
			MessageBox.Show("DedenaImplementacia -> IRozhranie = " + IsDerivedFrom(new DedenaImplementacia(), typeof(IRozhranie<>)).ToString());
			MessageBox.Show("DedenaImplementacia -> PriamaImplementacia = " + IsDerivedFrom(new DedenaImplementacia(), typeof(PriamaImplementacia)).ToString());
			MessageBox.Show("DedenaImplementacia -> object = " + IsDerivedFrom(new DedenaImplementacia(), typeof(object)).ToString());
			MessageBox.Show("DedenaImplementacia -> string = " + IsDerivedFrom(new DedenaImplementacia(), typeof(string)).ToString());
		}

		public static bool IsDerivedFrom(object instance, Type checkClassType, bool inherited = true)
		{
			var instanceType = instance.GetType();

			// GetInterfaces sa vracia mergnuty (nemusi sa ist na koren)
			if (checkClassType.IsInterface)
			{
				foreach (var currentInterface in instanceType.GetInterfaces())
				{
					if (DerivedTypes(currentInterface, checkClassType))
						return true;
				} // foreach

				return false;
			} // if

			// Ak sa nepytame na interface, tak pojdeme po dedenych triedach
			do
			{
				if (DerivedTypes(instanceType, checkClassType))
					return true;

				if (!inherited)
					return false;

				instanceType = instanceType.BaseType;
			} // do
			while (instanceType != typeof(object));

			return DerivedTypes(instanceType, checkClassType);	// object
		}

		private static bool DerivedTypes(Type sourceType, Type checkType)
		{
			return (sourceType.IsGenericType ? sourceType.GetGenericTypeDefinition() : sourceType) == checkType;
		}
	}

}
Astronaut
.NET › ASP identifikace uzivatele
7. 11. 2011   #149686

#1 Mirek
Ahoj,

Neriesil som to, len zopar veci na zamyslenie:

1/ Hodit to do session by znamenalo, ze to vies osetrit, kym uzivatel je na stranke, no ked sa vrati na druhy den, uz nie

2/ Osetrit IP (drzat to v DB) ma podobny efekt, uzivatel bude mat najskor dynamicku IP a tak sa prihlasi na druhy den a moze hlasovat este raz. Iny pripad je, ked uzivatelia pristupuju napr. z kaviarni alebo skol. Tak bloknes jednu proxy IP a X uzivatelov za NAT/PAT to bude mat kvoli jednemu bloknute.

3/ Drzat to v cookies je asi najlepsie... Ak nechces uzivatelovi zabit cookies, tak mu len napr. vygeneruj GUID pri prvom browsnuti na stranky a GUID drz v DB ako "uz hodnotil". Ak sa prihlasi uzivatel na inom prehliadaci alebo vynuluje cookies, bohuzial, bude mat povolene hlasovat este raz.

4/ Mozno nemusi ist o "riadne" prihlasovanie, ale mozes to zavesit na email. Prvykrat uzivatel musi zaregistrovat len emailovu adresu (tiez sa moze drzat v cookies) - ta sa overi registracnym linkom na nu poslanym.

Urcite ale daj vediet, ako si to poriesil a ake to (ne)malo klady, mozno to budeme potrebovat viaceri ;)

Bambulka
.NET › Uspesne alebo neuspesne vloz…
15. 10. 2011   #148674

1/ Ak sa jedna o konkretny field, v DB vies navrhnut to, aby dany stlpec obsahoval UNIQUE index. Potom kazde vlozenie vies osetrit cez try ... catch kde v catch chytis chybu (lebo zaznam existuje) - inac to zbehne bez toho, aby si vosiel do catch.

2/ Lepsim riesenim by bolo pouzit transakciu (vratane READ). V takejto transakcii by si si najprv selectol existenciu zaznamu (napr. cez LINQ) a potom urobil samotne vlozenie.

Bambulka
.NET › Proměnná pro celý program
15. 10. 2011   #148673

V C# existuju globalne premenne - ale tie by som nepouzival ako zaciatocnik (sietova prevadzka aplikacii apod.). Volaju sa staticke premenne.

Vytovri sa "public static int Meno;" a potom sa k nej pristupuje cez Class.Meno (kde sa implementovala) bez ohladu na vytvorenu instanciu danej triedy (teda je to globalne - napr. v App triede). Navrhovane riesenie je ale samozrejme lepsie. Odporucam pouzivat jasne rozhranie - lepsie sa to refaktoruje v buducnosti a pracuje sa s tym v teame!

LiborBes
.NET › C# Součet označených checkbo…
25. 8. 2011   #146720

Tazko povedat co presne potrebujes a kedy z tohto popisu. Ale ak mas problem v tom, ze pri kliku na checkbox vo WPF gride a potom spatne klik na nejaku akciu sa ti posledny checkbox "neuchovava", je to asi kvoli tomu, ze grid je este v edit mode.

Takze ak znie otazka, ze potrebujes ukoncit edit mode gridu pri kliku na nejaky button, staci to urobit takto:

dataGridXYZ.CommitEdit(DataGridEditingUnit.Row, /*exitEditing*/true)

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý