„Sznikák példakódok” változatai közötti eltérés

A VIK Wikiből
Kiskoza (vitalap | szerkesztései)
Eseménykezelés
a ConsoleColor nevű osztályt nem találja a VS-2017, helyette Color lett.
 
(25 közbenső módosítás, amit 6 másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
{{Vissza|Szoftvertechnikák}}
{{Vissza|Szoftvertechnikák}}
{{FejlesztesAlatt}}


{{Infobox
{{Infobox
12. sor: 10. sor:
}}
}}
}}
}}
<syntaxhighlight lang="csharp">
  class ThreadTestClass
  class ThreadTestClass
  {  
  {  
39. sor: 38. sor:
     }  
     }  
  }
  }
 
</syntaxhighlight>


{{Infobox
{{Infobox
51. sor: 50. sor:
}}
}}
}}
}}
<syntaxhighlight lang="csharp">
  SqlConnection conn = null;  
  SqlConnection conn = null;  
  try  
  try  
  {  
  {  
     // Kapcsolódás azadatbázishoz  
     // Kapcsolódás azadatbázishoz  
     conn = new SqlConnection(@"Data Source=LAPTOP\SQLEXPRESS;InitialCatalog=Northwind;Integrated Security=True");  
     conn = new SqlConnection(@"Data Source=LAPTOP\SQLEXPRESS;
          InitialCatalog=Northwind;Integrated Security=True");  
     // A kapcsolat megnyitása  
     // A kapcsolat megnyitása  
     conn.Open();  
     conn.Open();  
85. sor: 86. sor:
       conn.Close();  
       conn.Close();  
  }
  }
 
</syntaxhighlight>


{{Infobox
{{Infobox
97. sor: 98. sor:
}}
}}
}}
}}
<syntaxhighlight lang="csharp">
  public partial class MainForm : Form
  public partial class MainForm : Form
  {
  {
117. sor: 119. sor:
     }
     }
  }
  }
</syntaxhighlight>


{{Infobox
| cím = Négyzet rajzolás
| háttérszín = #C0ffee
| keretszín = black
| tartalom =
Í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.
{{Infobox-táblázat|
{{Infobox-táblázatsor|A kód nyelve|C#}}
}}
}}
<syntaxhighlight lang="csharp">
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
      }
    }
}
</syntaxhighlight>


{{Infobox
| cím = String rajzolás
| háttérszín = #C0ffee
| keretszín = black
| tartalom =
Í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.
{{Infobox-táblázat|
{{Infobox-táblázatsor|A kód nyelve|C#}}
}}
}}
<syntaxhighlight lang="csharp">
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);
    }
}
</syntaxhighlight>


{{Infobox
| cím = Háttérszál
| háttérszín = #C0ffee
| keretszín = black
| tartalom =
Í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.
{{Infobox-táblázat|
{{Infobox-táblázatsor|A kód nyelve|C#}}
}}
}}
<syntaxhighlight lang="csharp">
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());
      }
    }
}
</syntaxhighlight>
{{Infobox
| cím = Singleton példa
| háttérszín = #C0ffee
| keretszín = black
| tartalom =
Singleton tervezési minta implementálása C# nyelven
{{Infobox-táblázat|
{{Infobox-táblázatsor|A kód nyelve|C#}}
}}
}}
<syntaxhighlight lang="csharp">
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() {/* ... */}
}
</syntaxhighlight>
<syntaxhighlight lang="csharp">
// Használata:
Singleton s1 = Singleton.Instance;
s1.Print();
// Vagy:
Singleton.Instance.Print();
</syntaxhighlight>


{{Infobox
| cím = Kapcsolat nélküli hozzáférés
| háttérszín = #C0ffee
| keretszín = black
| tartalom =
Ismertesse egy rövid C# példán keresztül az ADO.NET kapcsolat nélküli adathozzáférését!
{{Infobox-táblázat|
{{Infobox-táblázatsor|A kód nyelve|C#}}
}}
}}
<syntaxhighlight lang="csharp">
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"]);
      }
    }
}
</syntaxhighlight>


{{Infobox
| cím = Attribútumok használata
| háttérszín = #C0ffee
| keretszín = black
| tartalom =
Mutasson példát attribútumokra C# nyelven (saját attributee létrehozás, használat, lekérdezés)
{{Infobox-táblázat|
{{Infobox-táblázatsor|A kód nyelve|C#}}
}}
}}
<syntaxhighlight lang="csharp">
[AttributeUsage(AttributeTargets.All)]
public class AuthorAttribute : System.Attribute
{
    public readonly string name;
    public AuthorAttribute(string _name)
    {
      name = _name;
    }
    public string Name
    {
      get
      {
          return name;
      }
    }
}
</syntaxhighlight>


<syntaxhighlight lang="csharp">
// Használata
[Author("Béla Béla")]
class JustASimpleClass
{
// ...
}
</syntaxhighlight>


<syntaxhighlight lang="csharp">
// Lekérdezés
foreach( object attribute in something.GetCustomAttributes(true))
{
    Console.WriteLine(attribute);
}
</syntaxhighlight>




[[Kategória:Infoalap]]
[[Kategória:Mérnök_informatikus]]

A lap jelenlegi, 2018. április 19., 22:38-kori változata


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);
 }