Sznikák példakódok

A VIK Wikiből
A lap korábbi változatát látod, amilyen Kristály Márk (vitalap | szerkesztései) 2015. május 8., 00:12-kor történt szerkesztése után volt. (Kód javítása)


Szál indítása

Mutasson kódrészletet szál indítására

A kód nyelve
C#
class ThreadTestClass
{ 
   public static void Main(string[] args) 
   { 
      Thread t = null; 
      if (args.Length == 0) 
      { 
         t = new Thread(new ThreadStart(ThreadMethod1)); 
         t.Start(); 
      } 
      else 
      { 
         t = new Thread(new ParameterizedThreadStart(ThreadMethod2)); 
         t.Start(args[0]); 
      }
   }
 
   public static void ThreadMethod1() 
   { 
      Console.WriteLine("Thread without parameter."); 
   } 

   public static void ThreadMethod2(object param) 
   { 
      Console.WriteLine("Thread with parameter: {0}", param.ToString()); 
   } 
}


Kapcsolatalapú hozzáférés

Ismertesse egy rövid C# példán keresztül az ADO.NET kapcsolatalapú adathozzáférést

A kód nyelve
C#
SqlConnection conn = null; 
try 
{ 
   // Kapcsolódás azadatbázishoz 
   conn = new SqlConnection(@"Data Source=LAPTOP\SQLEXPRESS;InitialCatalog=Northwind;Integrated Security=True"); 
   // A kapcsolat megnyitása 
   conn.Open(); 
   // Az adatbázis parancs létrehozása 
   SqlCommand command = new SqlCommand("SELECT ShipperID, CompanyName, Phone FROM Shippers"); 
   // Adatbázis kapcsolat megadása
   command.Connection = conn; 
   Console.WriteLine("{0,0}{1,15}{2,15}", "ShipperID", "CompanyName", "Phone"); 
   Console.WriteLine("-----------------------------------------------------------------"); 
   // Az adatok lekérdezése és kiiratása 
   using (SqlDataReader reader = command.ExecuteReader()) 
   { 
      while (reader.Read()) 
      Console.WriteLine("{0,4}{1,20}{2,20}", 
                          reader["ShipperID"].ToString(),
                          reader["CompanyName"].ToString(), 
                          reader["Phone"].ToString()); 
   } 
} 
catch (Exception ex) 
{
   // Kivétel szövegének kiiratása 
   Console.WriteLine(ex.Message); 
} 
finally 
{ 
   // Az adatbázis kapcsolat lezárása, ha meg lett nyitva 
   if((conn!=null)&&(conn.State==System.Data.ConnectionState.Open)) 
      conn.Close(); 
}


Eseménykezelés

Írj egy Form alapú programot, ami MessageBox-ban megjeleníti a leütött billentyűt!

A kód nyelve
C#
public partial class MainForm : Form
{
   public MainForm()
   {
      InitializeComponent();
      this.KeyDown += new KeyEventHandler(this.MainForm_KeyDown);
   }

   protected override void OnKeyDown(KeyEventArgs e)
   {
      // Meghívjuk az eredeti függvényt is
      base.OnKeyDown(e);
      MessageBox.Show("A billentyű (virt. fv.): " + e.KeyCode.ToString());
   }

   private void MainForm_KeyDown(object sender, KeyEventArgs e)
   {
      MessageBox.Show("A billentyű (eseménykez.): " + e.KeyCode.ToString());
   }
}


Négyzet rajzolás

Írjon olyan C# nyelvű alkalmazásrészletet, amely a (10,20) koordinátában megjelenít egy közepesen szürke színnel kitöltött 10 pixel hosszúságú négyzetet. A négyzet színe minden "r" bilentyű megnyomására legyen egyre sötétebb. A megjelenítés GDI-re épüljön.

A kód nyelve
C#
public partial class Form1 : Form
{
   private Brush brush1;
   private int grey = 200;

   public Form1()
   {
      InitializeComponent();
   }

   protected override void OnKeyDown(KeyEventArgs e)
   {
      base.OnKeyDown(e);
      if(e.KeyCode == Keys.R) {
         if(grey == 0) // ha elértük a színtartomány végét
            grey = 200;
         grey -= 10;
         Invalidate();
      }
   }

   protected override void OnPaint(PaintEventArgs e)
   {
      base.OnPaint(e);
      using (brush1 = new SolidBrush(ConsoleColor.FromArgb(grey, grey, grey)))
      {
         e.Graphics.FillRectrangle(brush1, 10, 20, 10, 10);  // brush, x, y, width, height
      }
   }
}


String rajzolás

Írjon olyan C# nyelvű alkalmazásrészletet, ami a (20,20) kokrdinátában megjeleníti, hogy a legutóbbi egérkattintás óta hány másodperc telt el! A megjelenítés GDI-re épüljön.

A kód nyelve
C#
public partial class Form1 : Form
{
   DateTime lastClick;
   String strDeltaTime;

   public Form1()
   {
      InitializeComponent();
      this.MouseClick += new MouseEventHandler(Form1_MouseClick);
      
      lastClick = null;
      strDeltaTime = "0";
   }

   private void Form1_MouseClick(object sender, MouseEventArgs e)
   {
      if (lastClick = null)
         lastClick = DateTime.Now;
      else
      {
         TimeSpan deltaTime = DateTime.Now.Subtract(lastClick);
         lastClick = DateTime.Now;
         strDeltaTime = deltaTime.Seconds.ToString();
         Invalidate(); // érvényteleníteni kell az ablak területet, hogy az új érték látszódjon
      }
   }

   protected override void OnPaint(PaintEventArgs e)
   {
      e.Graphics.DrawString(strDeltaTime, this.Font, new SolidBrush(Color.Black), 20, 20);
      base.OnPaint(e);
   }
}


Háttérszál

Írjon programot, ami egy háttérszálban egy perc alatt aszámol 1-zől 60-ig és az aktuális értéket kiírja a konzolra

A kód nyelve
C#
public class Program
{
   public static void Main(string[] args)
   {
      Thread t = new Thread(new ThreadStart(Szamol));
      t.IsBackground = true;
      t.Start();
   }

   public static void Szamol()
   {
      int szam = 0;
      while(szam < 60)
      {
         Thread.Sleep(1000);
         szam++;
         Console.WriteLine("A számláló értéke: {0}",szam.ToString());
      }
   }
}


Singleton példa

Singleton tervezési minta implementálása C# nyelven

A kód nyelve
C#
public class Singleton
{
   private static Singleton instance = null;

   public static Singleton Instance
   {
      get
      {
         if (instance == null)
            instance = new Singleton();
         return instance;
      }
   }

   protected Singleton() {} // Ne lehessen elérni a konstruktorát

   public void Print() {/* ... */}
}
// Használata:
Singleton s1 = Singleton.Instance;
s1.Print();
// Vagy:
Singleton.Instance.Print();


Kapcsolat nélküli hozzáférés

Ismertesse egy rövid C# példán keresztül az ADO.NET kapcsolat nélküli adathozzáférését!

A kód nyelve
C#
class SelectIntoDataSet{
   public static void Main(){
      string connectionString = "...";
      SqlConnection mySqlConnection = new SqlConnection(connectionString);
      
      // Vagy bármi más lekérdezés, amit kérnek
      string selectString = "SELECT TOP 10 ID, FirstName, LastName FROM Employee ORDER BY ID";
      SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
      mySqlCommand.CommandText = selectString;

      SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
      mySqlDataAdapter.SelectCommand = mySqlCommand;

      DataSet myDataSet = new DataSet();

      mySqlConnection.Open();           // Megnyitjuk
      Console.WriteLine("Retrieving rows from the Employee table");
      mySqlDataAdapter.Fill(myDataSet, "Employee");   // Kiolvasunk mindent
      mySqlConnection.Close();          // És rögtön be is zárjuk

      // És csak utána kezdjük el feldolgozni
      DataTable myDataTable = myDataSet.Tables["Employee"];

      foreach (DataRow myDataRow in myDataTable.Rows){
         Console.WriteLine("ID = "+ myDataRow["ID"]);
         Console.WriteLine("FirstName = "+ myDataRow["FirstName"]);
         Console.WriteLine("LastName = "+ myDataRow["LastName"]);
      }
   }
}


Attribútumok használata

Mutasson példát attribútumokra C# nyelven (saját attributee létrehozás, használat, lekérdezés)

A kód nyelve
C#
[AttributeUsage(AttributeTargets.All)]
public class AuthorAttribute : System.Attribute
{
   public readonly string name;

   public AuthorAttribute(string _name)
   {
      name = _name;
   }

   public string Name
   {
      get
      {
         return name;
      }
   }
}
// Használata
[Author("Béla Béla")]
class JustASimpleClass
{
// ...
}
// Lekérdezés
foreach( object attribute in something.GetCustomAttributes(true))
{
   Console.WriteLine(attribute);
}