Oldalak

A következő címkéjű bejegyzések mutatása: C#. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: C#. Összes bejegyzés megjelenítése

2013. február 4., hétfő

Refactoring használata

1. lépés: a kódblokk kijelölése, amit újra hasznosítani szerentnénk, majd a kijelölésen jobb kattintás. A megjelenő menüből a Refactor->Extract Method... menüpontot kell választani.
2. Lépés: a megjelenő párbeszéd ablakban meg kell adni a metódus nevét.

Az alábbi kódból:

for (int i = 0; i iLen; i++)
{
  int iKey;
  char cLetter;
  do
  {
    iKey = r.Next(65, 65 + (2 * iLen));
    cLetter = (char)iKey;
  } while (sSecret.Contains(cLetter.ToString()));
  sSecret += cLetter;
}

ez a metódus lett:

private static string GenerateWord(int iLen)
{
 string sSecret = "";
  for (int i = 0; i < iLen; i++)
  {
  int iKey;
  char cLetter;

  do
  {
  iKey = r.Next(65, 65 + (2 * iLen));
  cLetter = (char)iKey;
  } while (sSecret.Contains(cLetter.ToString()));

  sSecret += cLetter;
  }
  return sSecret;
}
A metódus hívási módja pedig ez:
sSecret = GenerateWord(iLen);

C# dll készítése

1. Lépés: létre kell hozni egy új ClassLibrary-t. Ehhez a Solution Explorer-ben egy jobb egér gombot kell nyomni, majd a megjelenő menüben az Add->New Project menüpontot kell kiválasztani. Az alábbi ábra ezt szemlélteti.
A menüpont kiválaszátása után a következő párbeszéd ablak jelenik meg:
A megjelenő ablakban a Templates listából a Class Library elemet kell kiválasztanunk. A Name mezőbe azt a nevet kell írni. Ez a név lesz az a névtér, amin keresztül el tudjuk majd érni a DLL függvényeit.


2. Lépés: a Dll metódusainak megírása.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleAppLibrary
{ 
        public class Game
        {
                static Random r = new Random();
                public string GenerateWord(int iLen)
                {
                        string sSecret = "";
                        for (int i = 0; i < iLen; i++)
                        {
                                int iKey;
                                char cLetter;

 do {

   iKey = r.Next(65, 65 + (2 * iLen));

   cLetter = (char)iKey;

 } while (sSecret.Contains(cLetter.ToString()));

 sSecret += cLetter;

 }

 return sSecret;

 }

 public void Evaluate(string ASecret, string AAnswer, out int ABlack, out int AWhite)

 {

 // kimeneti valtozok inicializalasa

 ABlack = 0;

 AWhite = 0;

 for (int iCnt = 0; iCnt < AAnswer.Length; iCnt++)

 {

 // hanyadik pozicioban szerepel a valasz iCnt-dik

 // eleme a titokban

 int iPos = ASecret.IndexOf(AAnswer[iCnt]);

 

 if (iCnt == iPos)

 {

 ABlack++;

 }

 else if (iCnt > -1)

 {

 AWhite++;

 }

 }

 }

 }

}



3. Lépés: a DLL referenciájának hozzáadása az alkalmazáshoz. Ehhez a Solution Eplorer-ben az alkalmazásunkat kijelölve egy jobb egér gombot kell nyomni. A megjelenő menüből az Add Reference... menüpontot kell kiválasztani.
Ezután a megjelenő párbeszéd ablakban a Project fülre kattintva ki kell választani a DLL-t, majd OK gombot kell nyomni.
Ezután a Solution Eplorer-ben a References ág kiegészül az újonan hozzáadott DLL referenciájával.

4. Lépés: a Dll metódusainak használata.

...
using ConsoleAppLibrary;
namespace ConsoleApplication2
{
 class Program
 {
 static Game game = new Game();
  static void Main(string[] args)
 {
  ...
 sSecret = game.GenerateWord(iLen);
...

C# adattípusok táblázata

C# adattípus .NET Mérete Legkisebb érték Legnagyobb érték
sbyte System.Sbyte 1 -128 127
byte System.Byte 1 0 255
short System.Int16 2 -32 768 32 767
ushort System.UInt16 2 0 65 535
int System.Int32 4 -2 147 483 648 2 147 483 647
uint System.UInt32 4 0 4 294 967 295
long System.Int64 8 -9 223 372 036 854 775 808 9 223 372 036 854 775 807
ulong System.UInt64 8 0 18 446 744 073 709 551 615
char System.Char 2 0 65 535
float System.Single 4 1,5*10-45 3,4*1038
double System.Double 8 5,0*10-324 1,7*10308
bool System.Boolean 1 false (0) true (1)
decimal System.Decimal 16 1,0*10-28 kb. 7,9*1028

C# összetett aritmetikai értékadó műveletek

Műveleti jel Használati alak Kifejezése Művelet
+= x += 4 x = x + 4

összeadás

-=

x -= 4 x = x - 4

kivonás

*= x *= 4 x = x * 4

szorzás

/= x /= 4 x = x / 4

osztás

%= x %= 4 x = x % 4 maradék képzés (modulo)

Provider pattern

public static class Note 
{
  private static NoteProvider provider; 
  static Note() 
  {
    string providerName = ConfigurationManager.AppSettings["noteProvider"]; 
    Type providerType = Type.GetType(providerName); 
    provider = (NoteProvider)Activator.CreateInstance(providerType); 
  }
  public static string GetNote() 
  {
    return provider.GetNote(); 
  }
}
 
public abstract class NoteProvider 
{
  public abstract string GetNote(); 
}
 
public class FirstNoteProvider : NoteProvider 
{
  public override string GetNote() 
  {
    return "első note"; 
  }
}
 
  
public class SecondNoteProvider : NoteProvider
{
  public override string GetNote() 
  {
    return "második note"; 
  }
}

Thread safe Singleton minta

class Program 
{
  static void Main(string[] args)
  {
  Singleton s, s2;
  s = Singleton.GetInstance();
  s2 = Singleton.GetInstance();
 
  // a két objektum referenciája egyenlő lesz
  Console.WriteLine(ReferenceEquals(s,s2));
  }
}
 
class Singleton
{
  private static Singleton instance; 
 
  /// statikus konstruktor
  /// a legelső osztáylra történő hivatkozákor lefut
  static Singleton()
  {
  instance = new Singleton();
  }
 
  public static Singleton GetInstance()
  {
  return instance;
  }
}

Műveletek precedenciája

Szint Művelettípus Műveletek
1 Elsődleges () . [] x++ x-- new typeof sizeof checked unchecked
2 Egyváltozós + - ! ~ ++x --x
3 Multiplikatív * / %
4 Additív + -
5 Eltolási << >>
6 Viszonító < > <= >= is
7 Egyenlőségi == !=
8 Logikai AND &
9 Logikai XOR ^
10 Logikai OR |
11 Feltételes AND &&
12 Feltételes OR ||
13 Feltételes művelet ?:
14 Értékadás = *= /= %= += -= <<= >>= &= ^= |=