Archiwum

Archive for the ‘Przykłady’ Category

[C#] Konfiguracja Unity i XamlParseException

26 marca 2012 2 Komentarze

Niedawno pierwszy raz użyłem microsoftowego kontenera Unity do wstrzykiwania zależności w mojej aplikacji WPF opartej o wzorzec MVVM.  Zagadnienie dependency injection przystępnie przybliżył mi cykl artykułów na xoft.pl , a samo Unity zostało bardzo zrozumiale opisane na mtaulty.com . Bez  problemów napisałem kod, który w codebehind widoku tworzy kontener, rejestruje potrzebne implementacje interfejsów używanych w ViewModelu i ustawia DataContext na uzyskany z kontenera obiekt ViewModel.

IUnityContainer uc = new UnityContainer();
uc.RegisterType(typeof(IMojTyp1), typeof(MojTyp1));
uc.RegisterType(typeof(IMojTyp2), typeof(MojTyp2));
uc.RegisterType(typeof(IMojTyp3), typeof(MojTyp3));
uc.RegisterType(typeof(IMojTyp4), typeof(MojTyp4));
this.DataContext = uc.Resolve<MainViewModel>();

Następnie postanowiłem przenieść rejestrację typów do pliku konfiguracyjnego App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <container>
      <register type="MojNamespace.IMojTyp1, MojAssembly"
                mapTo="MojNamespace.MojTyp1, MojAssembly"/>
      <register type="MojNamespace.IMojTyp2, MojAssembly"
            mapTo="MojNamespace.MojTyp2, MojAssembly"/>
      <register type="MojNamespace.IMojTyp3, MojAssembly"
            mapTo="MojNamespace.MojTyp3, MojAssembly"/>
      <register type="MojNamespace.IMojTyp4, MojAssembly"
            mapTo="MojNamespace.MojTyp4, MojAssembly"/>
    </container>
  </unity>
</configuration>

Teoretycznie wiedziałem jak to zrobić , ale praktyka okazała się jak zwykle bezlitosna: zażądała ofiary z czasu i ukorzenia się przed bezwzględnymi Exceptionami. Nie chciałem się poddać.  Zaatakowany przez drapieżne wyjątki użyłem najbardziej śmiercionośnej broni w całym IT, czyli google.

Czytaj dalej…

Reklamy
Kategorie:Przykłady Tagi: , , , ,

[C#] Najszybsza metoda zliczania linii w stringu

26 lutego 2012 2 Komentarze

Trafiłem dzisiaj na ciekawy artykuł, którego autor testuje szybkość wykonania różnych metod mających na celu zwrócenie ilości linii zawartych w zmiennej typu string.

Użyte zostały m.in. wyrażenia regularne

static Regex r = new Regex("\n", RegexOptions.Multiline);
static long LinesCountRegex(string s)
{
     MatchCollection mc = r.Matches(s);
     return mc.Count;
}

LINQ

static long LinesCountLinq(string s)
{
      return (from ch in s
              where ch == '\n'
              select ch).Count();
}

static long LinesCountLinqCount(string s)
{
       return s.Count(c => (c == '\n'));
}

wskaźniki

unsafe static long LinesCountUnsafePtr(string s)
{
       long lineCount = 1;
       fixed (char* pchar = s)
       {
             char* p = pchar;
             for (; *p != '\0'; p++)
             {
                  if (*p == '\n') lineCount++;
             }
        }
        return lineCount;
}

ale najszybsze rozwiązanie okazało się nie być związane z żadną wyszukaną techniką.

static long LinesCount4(string s)
{
     long count = 0;
     int position = -1;
     while ((position = s.IndexOf('\n', position + 1)) != -1)
     {
         count++;
     }
     return count;
}
Kategorie:Przykłady Tagi: , , , ,

[C#] Interfejsy – z czym to się je?

25 listopada 2011 6 Komentarzy

Podstawy

Jak najszybciej/najprościej wytłumaczyć czym jest interfejs? Interfejs, to taka jakby klasa, która deklaruje swoje składowe (głównie metody), ale ich nie implementuje, tzn. interfejs zawiera nazwę metody, ale nie posiada jej ciała z kodem. Nie można utworzyć obiektu, który będzie instancją jakiegoś interfejsu, ale interfejs może być zaimplementowany przez klasę. Jeśli klasa implementuje interfejs to znaczy, że zapewnia implementację wszystkich członków interfejsu, tzn. interfejs mówi klasie, że klasa musi posiadać określone metody, właściwości itd. Interfejs informuje jakich zachowań (implementacji jakich metod) będziemy oczekiwać od klasy. Klasa może implementować wiele interfejsów naraz. Koniec bełkotu, przejdźmy do przykładu 🙂

using System;

namespace InterfaceTest
{
	interface IKucharz
	{
		void Gotowanie();
	}

	class TypOsoby1:IKucharz
	{
		int Id {get;set;}
		string Imie {get;set;}

		public TypOsoby1(int id, string imie)
		{
			this.Id=id;
			this.Imie=imie;
		}

		public void Gotowanie()
		{
			Console.WriteLine (this.ToString()+" gotuje...");
		}

		public override string ToString()
		{
			return string.Format ("{1}",this.Id,this.Imie);
		}
	}

	class MainClass
	{
		public static void Main (string[] args)
		{
			TypOsoby1 adam = new TypOsoby1(1,"Adam");
			adam.Gotowanie();
		}
	}
}

Czytaj dalej…

Kategorie:Przykłady Tagi: , ,

[C#] var, delegacje, metody anonimowe i wyrażenia lambda

27 sierpnia 2011 8 Komentarzy

Artykuł ten w przystępny sposób przedstawia tytułowe zagadnienia osobie, która nie miała z nimi styczności.

Słowo kluczowe var

Deklarując zmienną musimy podać jej typ. Natomiast przy jej definicji możemy podać typ, ale możemy też skorzystać ze słowa kluczowego var.

int a; //deklaracja zmiennej typu integer
a=5; //inicjalizacja zmiennej

int b=6; //definicja i inicjalizacja zmiennej

var c=7; //utworzenie zmiennej typu integer za pomocą słowa kluczowego var

var d; //Error: An implicitly typed local variable declarator must include an initializer

Możemy pominąć typ tylko wtedy, gdy kompilator sam może go rozpoznać na podstawie jakichś danych.

var jest pomocne kiedy nie mamy ochoty zastanawiać się jaki typ zwraca jakaś funkcja.

var rezultat = NieWiemJakiTypZwracaTaFunkcjaINieMamOchotyZastanawiacSieNadTym();

Oczywiście w poważnym kodzie nie nadajemy tak długich nazw funkcjom’

var jest często stosowany w technologii LINQ, ale jest to temat na inny wpis.

Czytaj dalej…

Kategorie:Przykłady Tagi: , ,

[C#] Pierwszy krok z Microsoft Office Excel

26 marca 2011 Dodaj komentarz
using System;

using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelTestApp
{
    class Program
    {
        static void Main()
        {
            var ex = new Excel.Application {Visible = true};
            ex.Workbooks.Add();
            ex.Cells[4, "F"] = "jakaś wartość";
            Console.WriteLine("ok");
        }
    }
}

Uwaga: pamiętać o dodaniu Microsoft.Office.Interop.Excel w References



Kategorie:Przykłady Tagi: , , ,

[C#,WinForms] Gra Układanka

1 marca 2011 3 Komentarze

Dzisiaj przedstawię proces tworzenia prostej gry, którą nazwałem „Układanką”. Jeżeli jesteś początkującym programistą i chcesz napisać pseudoużyteczny program z wykożystaniem Visual Studio i Windows Forms – ten wpis jest właśnie dla Ciebie. Jeżeli jesteś bardziej doświadczonym programistą, chcesz się trochę pośmiać / przeczytać dzienną normę kiepskiego kodu / powytykać kilka błędów i z wielką satysfakcją wyszydzić autora, bądź też pomóc zrozumieć autorowi jego błędy (niepotrzebne skreślić) – też możesz przeczytać 😉 Do dzieła!
Czytaj dalej…

Kategorie:Przykłady Tagi: , ,

[C#] Płytkie i głębokie kopie obiektów – wprowadzenie

18 lutego 2011 16 Komentarzy

Dzisiaj omówię mechanizm tworzenia płytkich i głębokich kopii obiektów w języku C#. Zrozumienie tego zagadnienia jest ważne jeżeli chcemy tworzyć rozbudowane programy orientowane obiektowo. Czytaj dalej…

Kategorie:Przykłady Tagi: ,