Sznikák példakódok

A VIK Wikiből


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 brush;
    private int grey = 200;
 
    public Form1()
    {
       InitializeComponent();
    }
 
    protected override void OnKeyDown(KeyEventArgs e)
    {
       base.OnKeyDown(e);
       if(e.KeyCode == Keys.R) {
          grey -= 10;
          if(grey == 0) // ha elértük a színtartomány végét
             grey = 200;
          Invalidate();
       }
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
       base.OnPaint(e);
       using (brush = new SolidBrush(Color.FromArgb(grey, grey, grey)))
       {
          e.Graphics.FillRectrangle(brush, 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 el számol 1-tő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);
 }