Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

20 Ocak 2016 Çarşamba

Linq ile GroupBy ve Sum örneği

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

namespace ConsoleApplication6
{
    class Tax
    {
        public int Orani;
        public int Amount;
        public int ReasonCode;
        public string Reason;
        public override string ToString()
        {
            return string.Format("Oranı:{0}, Amount:{1}, ReasonCode:{2}, Reason:{3}", Orani,Amount,ReasonCode,Reason);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {

            List lst = new List()
                            {
                                new Tax(){Amount = 10, Orani = 18},
                                new Tax(){Amount = 5, Orani = 18},
                                new Tax(){Amount = 0, Orani = 0, Reason = "351", ReasonCode = 351},
                                new Tax(){Amount = 0, Orani = 0, Reason = "251", ReasonCode = 251},
                                new Tax(){Amount = 6, Orani = 8},
                                new Tax(){Amount = 16, Orani = 8},
                            };
            // Sum Amount
            var total = (from l in lst
                select l.Amount).Sum();
            Console.WriteLine("Toplam Vergi: "+total);

            // GroupBy
            var a = from l in lst
                group l by l.Orani
                into g
                orderby g.Key
                select g;
            foreach (IGrouping g in a)
            {
                Console.WriteLine(g.Key);
                foreach (Tax tax in g)
                {
                    Console.WriteLine(tax);
                }
            }
        }
    }
}
Çıktısı:

14 Haziran 2014 Cumartesi

Redis ve ServiceStack İncelemesi

Redis nedir üzerine epeyce okurken, "neden bunları not almıyorum" diye aklımdan geçirdim ve tüm alıntı, çalıntı bilgileri bir de benim anlayış hizama göre sıralamak istedim. Kendime not almaya devam ediyorum :)

Kaynaklar:
Redis Komutları
http://kodluyorum.blogspot.com.tr
http://gurevin.net/2013/04/05/nosql-iliskisel-veritabanlarina-karsimi/
En temiz şekilde veri tiplerini anlamak için



SET

Tek seferde tek değeri anahtarlamak için kullanılıyor
127.0.0.1:6379> set anahtar deger
OK

MSET

Tek seferde birden fazla değeri anahtarlamak için kullanılıyor ve Redis'e defalarca gidip dönmektense işlemi tek seferde hallettiği için doğal olarak daha hızlı oluyor.
127.0.0.1:6379> mset anahtar1 deger1 anahtar2 deger2
OK

ServiceStack ile MSET




MGET


(GetValues ya da GetValuesMap), ile tek çağrıda birden fazla anahtarın değerini alabiliriz.
***On the ServiceStack.Redis client you can use GetValues or GetValuesMap (both string and T apis are available) for fetching multiple values (uses MGET) in a single call. Only existing items are returned, which you can detect with GetValues if you have Id's on your models or GetValuesMap which returns a dictionary of existing keys and their values.

Pipelining de MSET'e benziyor ve sonuçlarını anında görmemize gerek olmayan işlemleri gruplayarak tek seferde gönderiyor ve yine doğal olarak hızlı çalışıyor.
Use Pipelining or Transactions***If for some reason you really only want to check the existence of keys in Redis without fetching them, then you can use a Transaction / or Pipeline (both are pipelined) to queue up multiple operations that gets sent to Redis in 1 socket write. Here's an example of this from RedisStackOverflow demo that queues up 30 operations that gets send and executed in a single batch.

SELECT,

ile Redis üzerinde DB seçebiliriz.Parametre 0..n kadar int değer olur.

FLUSHALL,

ile seçili veritabanı içindeki verileri sileriz. ServiceStack içinde komutları void FlushDb(); ve void FlushAll(); olarak geçiyor.

Veri Tipleri

String olarak Object insert

Basit olarak string tipinde veri kaydı ve çekilmesi.
127.0.0.1:6379> set anahtar deger
OK
127.0.0.1:6379> get anahtar 
"deger"

ServiceStack ile

değer kısmına JSON formatında nesnemizi yazabiliriz. Her TC vatandaşının temel bilgilerinin kaydını düşünelim.

NodeJS Redis ile

var redis = require('redis'),
    c = redis.createClient(),

    a = c.SET("users:1", '{"name":"Fred","age":25}');

LIST

Bir anahtar içine List olarak verileri yazalım:


Sonuç:


SETs



Farklı anahtar için veri girişi:

HASHES

8 Aralık 2013 Pazar

PFX dosyasıyla WebRequest yaparak C# ile HTTP formundaki verileri gönderebilmek

Bir arkadaşıma yazmıştım anlaşılır olsun diye ve belki başkalarının da işine yarar ümidiyle buraya eklemiş olayım.
using System;
using System.IO;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace ConsoleApplication1
{
    public class Program
    {
        private static void Main(string[] args)
        {
            try
            {
                // Web talebi yapacağımız nesneyi yaratırken gideceğimiz web adresini belirtiyoruz
                // Bu adres başta https://www.aidap.naimes.faa.gov/aidap/qhome.html muş gibi görünsede
                // aslında sayfadaki formun gideceği web adresi (sol tarafta html formun action kısmında bulabilirsin).
                HttpWebRequest talep =
                    (HttpWebRequest) WebRequest.Create("https://www.aidap.naimes.faa.gov/aidap/XmlNotamServlet");


                #region Sertifika işlemlerimiz

                // Sertifikamızı dosyadan çekip şifre ile nesnemizi yaratıyoruz
                X509Certificate2 clientCertificate = new X509Certificate2(@"C:\aidapuser_2013.pfx", "WC##20abba");
                // talep nesnemize sertifikamızı ekleyelim
                talep.ClientCertificates.Add(clientCertificate);
                talep.Credentials = CredentialCache.DefaultCredentials;

                // isteklerimizi zaman içerisinde yaparken Credential'ı değiştirmeyeceğimiz için true yapıyoruz. 
                // Aralarda farklı credentiallar kullanacak olsaydık false yapar, her isteğimizin authenticate edilmesini sunucuya bildirirdik
                talep.PreAuthenticate = true;

                #endregion


                #region Talep edeceğimiz bilgiler ve talep yöntemimiz

                // bağlantıyı açık tutalım ki birden fazla gidiş gelişlerde TCP işlemlerini her defasında tekrarlayarak arka planda zaman ve emek kaybetmesin
                talep.KeepAlive = true;

                // Talebimiz sadece bir url değil, form bilgilerimizin POST metoduyla gönderimi olduğundan ContentType aşağıdaki gibi olacak
                talep.ContentType = "application/x-www-form-urlencoded";

                // html de 
etiketinin özellikleri şunlardır: //
// ... //
talep.Method = "POST"; // Sayfadaki text kutuları, dropdownların hepsinin bir id'si var ve içlerindeki ya da seçilmiş değerleri ise value olarak // degisken1=deger1°isken2=deger2&..... şeklinde yazılır // aşağıdaki bilgide user id= SXS, password=notam123*, active=Y ve location_id=LTFG olarak gönderilirken diğerleri boş olarak gidiyor. string formunIcerigi = "uid=kullaniciAdiii&password=abc123*&active=Y&lastmod=&todate=&type=&account_id=&location_id=LTFG¬am_id=¬am_text=¬am_report="; // form içeriğini byte[] (byte dizisine) çevirmemiz gerekiyor yani her karakter byte değeriyle gidecek. Mesela; // A h m e t metninin byte dizisi hali // 065 104 109 101 116 (decimal hali) var encoder = new ASCIIEncoding(); var requestData = encoder.GetBytes(formunIcerigi); // Talebimizin içeriğinin ne kadar olduğunu yazalım talep.ContentLength = requestData.Length; #endregion // istemci ile(bizim program), sunucu arasında kurduğumuz bağlantı akışını ele geçirelim (içinden su geçebilen hortum gibi düşün) var gidenAkis = talep.GetRequestStream(); // talebimizin byte[] halini hortumdan akıtmamız gerekecek gidenAkis.Write(requestData, 0, requestData.Length); // şimdi verilerimiz gittiğine göre gidenAkışımızı kapatlım ve gelen akışa bakalım. gidenAkis.Close(); // Protokolün talep kısmı tamamlandı, şimdi cevap kısmını görebileceğimiz nesnemizi talep nesnemize oluşturtalım // Bu tıpkı; // "Git bak ahmet ne yapıyormuş" deyip çocuğu gönderdikten sonra, çocuk gelince // "eee... ne yapıyormuş?" diye sormamıza benzer. Elçiyi gönderdik ve elçi dönünce muhatabımızın cevabını elçiye sormamız gibi. var cevap = (HttpWebResponse) talep.GetResponse(); // HTTP ile dosya indirirken nasıl GBlarca veriyi çektiğimiz bir CEVAP akışı varsa burada da aynı gelen akışını yaratıyoruz. Stream gelen_akisi = cevap.GetResponseStream(); // Dönen cevabı stringe çevirip ekranda gösteriyoruz. StreamReader sr = new StreamReader(gelen_akisi); String result = sr.ReadToEnd(); Console.WriteLine(result); // Kaynaklarla işimiz bitti iade edelim. sr.Close(); gelen_akisi.Close(); } catch (Exception ex) { throw (ex); } } } }

20 Kasım 2013 Çarşamba

Xml Serileştirmede XmlArray, XmlArrayItem, XmlAttribute, XmlSerializer, XmlType, XmlEnum, XmlIgnore, XmlInclude, IsNullable vd. incelemesi

Kodun içinde notlarım var. Örnek msdn den.

using System.IO;
using System.Xml.Serialization;

public class Run
{
    public static void Main()
    {
        Run test = new Run();
        test.SerializeDocument("books.xml");
    }

    public void SerializeDocument(string filename)
    {
        // Creates a new XmlSerializer.
        XmlSerializer s =
        new XmlSerializer(typeof(MyRootClass));

        // Writing the file requires a StreamWriter.
        TextWriter myWriter = new StreamWriter(filename);

        // Creates an instance of the class to serialize. 
        MyRootClass myRootClass = new MyRootClass();

        /* Uses a basic method of creating an XML array: Create and 
        populate a string array, and assign it to the 
        MyStringArray property. */

        string[] myString = { "Hello", "world", "!" };
        myRootClass.MyStringArray = myString;

        /* Uses a more advanced method of creating an array:
           create instances of the Item and BookItem, where BookItem 
           is derived from Item. */
        Item item1 = new Item();
        BookItem item2 = new BookItem();

        // Sets the objects' properties.
        item1.ItemName = "Widget1";
        item1.ItemCode = "w1";
        item1.ItemPrice = 231;
        item1.ItemQuantity = 3;

        item2.ItemCode = "w2";
        item2.ItemPrice = 123;
        item2.ItemQuantity = 7;
        item2.ISBN = "34982333";
        item2.Title = "Book of Widgets";
        item2.Author = "John Smith";

        // Fills the array with the items.
        Item[] myItems = { item1, item2 };

        // Sets the class's Items property to the array.
        myRootClass.Items = myItems;

        /* Serializes the class, writes it to disk, and closes 
           the TextWriter. */
        s.Serialize(myWriter, myRootClass);
        myWriter.Close();
    }
}

// This is the class that will be serialized. 
public class MyRootClass
{
    private Item[] items;

    /* Here is a simple way to serialize the array as XML. Using the
       XmlArrayAttribute, assign an element name and namespace. The
       IsNullable property determines whether the element will be 
       generated if the field is set to a null value. If set to true,
       the default, setting it to a null value will cause the XML
       xsi:null attribute to be generated. */

    /* IsNullable = true 
            <NULLveOLUSTURULacak xsi:nil="true" xmlns="http://www.IsNullable.com" /> */
    [XmlElement(ElementName = "NULLveOLUSTURULacak", IsNullable = true, Namespace = "http://www.IsNullable.com")]
    public string IsNullable_true_ornegi;

    /* IsNullable = false (değer atanmazsa da false gibi çalışır) 
            'null değeri olduğu için xml elemanı oluşturulmadı' */
    [XmlElement(ElementName = "NULLveOLUSTURULMAYAcak", IsNullable = false, Namespace = "http://www.IsNullable.com")]
    public string IsNullable_false_ornegi;
    
    
    
    [XmlArray(ElementName = "bomBosDizi", Namespace = "http://www.nullDegerliDizi.com", IsNullable = true)]
    public string[] bosDizi;
    /* IsNullable = true olan XmlArray özellikli field sonucu:
            <bomBosDizi xsi:nil="true" xmlns="http://www.nullDegerliDizi.com" />
     */

    /// <summary>
    /// 
    /// XmlArray Özelliğinin BASİT şekli
    /// 
    /// </summary>
    [XmlArray(ElementName = "MyStrings", Namespace = "http://www.cpandl.com", IsNullable = true)]
    public string[] MyStringArray;
    /* En temel haliyle XmlArray aynı tip dizi elemanları için bir xml elemanı altında toplayacaktır.
       Sonuç:
        <MyStrings xmlns="http://www.cpandl.com">
          <string>Hello</string>
          <string>world</string>
          <string>!</string>
        </MyStrings>
     */


    [XmlArray(ElementName = "Dizi_Kok_Elemani")]
    [XmlArrayItem("Eleman_Etiketi")]
    public string[] stringDizi =  { "Hello", "world", "!" };
    /*
        <Dizi_Kok_Elemani>
          <Eleman_Etiketi>Hello</Eleman_Etiketi>
          <Eleman_Etiketi>world</Eleman_Etiketi>
          <Eleman_Etiketi>!</Eleman_Etiketi>
        </Dizi_Kok_Elemani>
     */


    /// <summary>
    /// 
    /// XmlArray Özelliğinin KARMAŞIK şekli
    /// 
    /// </summary>
    [XmlArrayItem(ElementName = "Item",     IsNullable = true, Type = typeof(Item),     Namespace = "http://www.cpandl.com"),
     XmlArrayItem(ElementName = "BookItem", IsNullable = true, Type = typeof(BookItem), Namespace = "http://www.cohowinery.com")]
    [XmlArray]
    public Item[] Items
    {
        get { return items; }
        set { items = value; }
    }
    /*
     Items propertysi Item cinsinden bir dizi alır.
     Yani hem Item, hem BookItem türü verileri alabilir.
     Serileştirilecek nesnenin Items elemanı hem Item hem de BookItem 
     türünde iki nesne alacağı için dizi içindeki eleman türüne göre serileştirme çalışacak
     Sonuç:
      <Items>
        <Item xmlns="http://www.cpandl.com">
          <OrderItem>Widget1</OrderItem>
          <ItemCode>w1</ItemCode>
          <ItemPrice>231</ItemPrice>
          <ItemQuantity>3</ItemQuantity>
        </Item>
        <BookItem xmlns="http://www.cohowinery.com">
          <ItemCode>w2</ItemCode>
          <ItemPrice>123</ItemPrice>
          <ItemQuantity>7</ItemQuantity>
          <Title>Book of Widgets</Title>
          <Author>John Smith</Author>
          <ISBN>34982333</ISBN>
        </BookItem>
      </Items> 
     */


    [
        XmlArrayItem(Type = typeof (BookItem)),
        XmlArrayItem(Type = typeof (string)),
        XmlArrayItem(Type = typeof (int))
    ] 
    public object[] KarisikTipler =
    {
        "Bu", 1, new BookItem()
                 {
                     Author = "Cem",
                     ISBN = "93845934",
                     ItemCode = "item kod 10",
                     ItemName = "item adı",
                     ItemPrice = 1.2m,
                     ItemQuantity = 10,
                     Title = "Başlık şu, bu, o"
                 }
    };
    /* Her dizi elemanı string, int ve BookItem tipindeyse serileştirilecek değilse istisna fırlatacak.
        <KarisikTipler>
          <string>Bu</string>
          <int>1</int>
          <BookItem>
            <OrderItem>item adı</OrderItem>
            <ItemCode>item kod 10</ItemCode>
            <ItemPrice>1.2</ItemPrice>
            <ItemQuantity>10</ItemQuantity>
            <Title>Başlık şu, bu, o</Title>
            <Author>Cem</Author>
            <ISBN>93845934</ISBN>
          </BookItem>
        </KarisikTipler>
     */

    /// 
    /// xml çıktısı:
    ///     <EmpStatus>Triple</EmpStatus>
    /// 
    public EmployeeStatus EmpStatus=EmployeeStatus.Three;
}

public enum EmployeeStatus
{
    [XmlEnum(Name = "Single")]
    One,
    [XmlEnum(Name = "Double")]
    Two,
    [XmlEnum(Name = "Triple")]
    Three
}


public class Item
{
    [XmlElement(ElementName = "OrderItem")]
    public string ItemName;
    public string ItemCode;
    public decimal ItemPrice;
    public int ItemQuantity;
}

public class BookItem : Item
{
    public string Title;
    public string Author;
    public string ISBN;
}


/// <summary>
/// Şu nesne için:
/// 
///    public KitapItem kit = new KitapItem()
///                           {
///                               Author = "Kitapçı Cem",
///                               ISBN = "---1---",
///                               ItemCode = "item kodum oldu",
///                               ItemName = "item adım yok oldu",
///                               ItemPrice = 10.2m,
///                               ItemQuantity = 23,
///                               Title = "illa başlık, hep başlık"
///                           };
/// 
/// 
/// xml sonucu:
/// 
///  <kit d2p1:baslik="illa başlık, hep başlık" xmlns:d2p1="attribute_nameSpeysi">
///    <OrderItem xmlns="kitapNameSpace">item adım yok oldu</OrderItem>
///    <ItemCode xmlns="kitapNameSpace">item kodum oldu</ItemCode>
///    <ItemPrice xmlns="kitapNameSpace">10.2</ItemPrice>
///    <ItemQuantity xmlns="kitapNameSpace">23</ItemQuantity>
///    <Author xmlns="kitapNameSpace">Kitapçı Cem</Author>
///    <ISBN xmlns="kitapNameSpace">---1---</ISBN>
///  </kit>
/// 
/// </summary>
[XmlType(TypeName = "KitapEleman", Namespace = "kitapNameSpace")]
public class KitapItem : Item
{
    [XmlAttribute(Namespace = "attribute_nameSpeysi", AttributeName = "baslik", DataType = "normalizedString")]
    public string Title;
    public string Author;
    public string ISBN;
}

<?xml version="1.0" encoding="utf-8"?>
<MyRootClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <NULLveOLUSTURULacak xsi:nil="true" xmlns="http://www.IsNullable.com" />
  <bomBosDizi xsi:nil="true" xmlns="http://www.nullDegerliDizi.com" />
  <MyStrings xmlns="http://www.cpandl.com">
    <string>Hello</string>
    <string>world</string>
    <string>!</string>
  </MyStrings>
  <Items>
    <Item xmlns="http://www.cpandl.com">
      <OrderItem>Widget1</OrderItem>
      <ItemCode>w1</ItemCode>
      <ItemPrice>231</ItemPrice>
      <ItemQuantity>3</ItemQuantity>
    </Item>
    <BookItem xmlns="http://www.cohowinery.com">
      <ItemCode>w2</ItemCode>
      <ItemPrice>123</ItemPrice>
      <ItemQuantity>7</ItemQuantity>
      <Title>Book of Widgets</Title>
      <Author>John Smith</Author>
      <ISBN>34982333</ISBN>
    </BookItem>
  </Items>
</MyRootClass>

XmlAttribute bir yerde tanımlıysa, o field ya da property nin tipindeki(class,struct vs.) [XmlType(......)] bir işe yaramaz.
KitapItem sınıfının Title fieldı için farklı bir namespace tanımladık (attribute_namepseysi) ve bunun için d2p1 oluşturulup özelliğin önüne konulduğuna dikkat edelim emi...

Enum gösterimi için [XmlEnum (Name = "enumGorunecekAdi")] kullanılır


XmlIgnore ile serileştirilmesini istemediğimiz field, prop vs. seçilir


XmlInclude ile hangi tiplerin serileştirilip serileştirilmeyeceği belirlenir

1 Temmuz 2013 Pazartesi

Serileştirme, Serialization, C#

Temel olarak serileştirme aşağıdaki kod ile anlaşılabilir ancak birazcık daha detaylı bilgi için biraz daha aşağıdaki kod yardımcı olacaktır.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using Newtonsoft.Json;

namespace ConsoleApplication1
{
    [Serializable]
    public class Ornek
    {
        public string Adi { get; set; }

        public void calis()
        {
        }
    }

    class Program
    {
        public static Ornek o = new Ornek() { Adi = "cem" };
        private static void Main(string[] args)
        {
            json();
        }


        public static void json()
        {
            string json = JsonConvert.SerializeObject(o);
            Console.WriteLine(json);
        }

        public static void binary()
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream stream = File.Create("c:\\temp\\test.txt");
            Console.WriteLine("Serializing vector");
            formatter.Serialize(stream, o);
            stream.Close();

        }

        public static void xml(){
            XmlSerializer x = new XmlSerializer(o.GetType());
            x.Serialize(Console.Out, o);
        }
    }
}


/* ÇIKTILARIMIZ:
 * XML
 
 <?xml version="1.0" encoding="ibm857"?>
<Ornek xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://w
ww.w3.org/2001/XMLSchema">
  <Adi>cem</Adi>
</Ornek>
 
 * 
 * BINARY
 
      ÿÿÿÿ             JConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null      ConsoleApplication1.Ornek     <Adi>k__BackingField           cem 
 * 
 * JSON
 
 {"Adi":"cem"}
 */

Kodumuz şöyle olacak:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;

namespace ConsoleApplication7
{
    [Serializable]
    public class Basit
    {
        public char c = 'a';
        public byte b = (byte)'a';
        private char privateAmaBinaryFormatterSerilestirir_SoapFormatterSerilestirmez = (char)65;

        [XmlElement(DataType = "string", ElementName="ADI")] // XSD tanımlamaları
        public string Adi = "isimsiz";

        [NonSerialized] // BinaryFormatter private'a bakmaksızın serileştirdiği için [NonSerialized] ile işaretliyoruzki, serileştirmesin
        private byte NonSerialized_isaretli_BinaryFormatter_Serilestirmez = 1;
    }

    public class Example
    {
        public static void Main()
        {
            var b = BinaryFormatla_seri_deseri_lestir();
            var s = SoapFormatla_seri_deseri_lestir();
            var x = XML_seri_deseri_lestir();
            /*
             * Binary Serialization
             * Serialization can be defined as the process of storing the state of an object to a storage medium. 
             * During this process, 
             *   the public and private fields of the object 
             *   and the name of the class, 
             *   including the assembly containing the class, 
             * are converted to a stream of bytes, which is then written to a data stream. 
             * When the object is subsequently deserialized, an exact clone of the original object is created.
             * When implementing a serialization mechanism in an object-oriented environment, you have to make a number of tradeoffs between ease of use and flexibility. 
             * The process can be automated to a large extent, provided you are given sufficient control over the process. 
             */

            /*
             * XML and SOAP Serialization
             * XML serialization converts (serializes) the public fields and properties of an object, 
             * or the parameters and return values of methods, 
             * into an XML stream that conforms to a specific XML Schema definition language (XSD) document. 
             * XML serialization results in strongly typed classes with public properties and fields that are converted to a serial format (in this case, XML) for storage or transport.
             */
        }

        private static Basit XML_seri_deseri_lestir()
        {
            Type t = Type.GetType("ConsoleApplication7.Basit");
            XmlSerializer ser = new XmlSerializer(t);
            FileStream fs = new FileStream("XmlSer.xml",FileMode.OpenOrCreate);
            ser.Serialize(fs,new Basit());
            fs.Close();

            Basit x = (Basit) ser.Deserialize(new FileStream("XmlSer.xml", FileMode.Open));
            return x;
        }

        private static Basit SoapFormatla_seri_deseri_lestir()
        {
            SoapFormatter soapFmt = new SoapFormatter();
            FileStream fs = new FileStream("basit.xml", FileMode.OpenOrCreate);
            soapFmt.Serialize(fs, new Basit());
            fs.Close();

            FileStream fs1 = new FileStream("basit.xml", FileMode.Open);
            Basit s = (Basit)soapFmt.Deserialize(fs1);
            return s;
        }

        private static Basit BinaryFormatla_seri_deseri_lestir()
        {
            BinaryFormatter binaryFmt = new BinaryFormatter();
            FileStream fs = new FileStream("basit.bin", FileMode.OpenOrCreate);
            binaryFmt.Serialize(fs, new Basit());
            fs.Close();

            FileStream fs1 = new FileStream("basit.bin", FileMode.Open);
            Basit b = (Basit)binaryFmt.Deserialize(fs1);
            return b;
        }
    }
}
ve çıktılardan önce dönen değişkenler şöyle:
Dosyalardaki çıktılar ise: BINARY Formatlı Çıktının HEX Görünümü:
SOAP XML Çıktısı:
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<a1:Basit id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ConsoleApplication7/ConsoleApplication7%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<c>a</c>
<b>97</b>
<privateAmaBinaryFormatterSerilestirir_SoapFormatterSerilestirmez>A</privateAmaBinaryFormatterSerilestirir_SoapFormatterSerilestirmez>
<Adi id="ref-3">isimsiz</Adi>
</a1:Basit>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML Çıktısı:
<?xml version="1.0"?>
<Basit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <c>97</c>
  <b>97</b>
  <ADI>isimsiz</ADI>
</Basit>

27 Şubat 2013 Çarşamba

Action ve Func ile asenkron metot çağrı

using System;
using System.Collections.Generic;
using System.Threading;

namespace KlinikOzetTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("----------------- aksiyonParametresiz ---------");
            #region 
            // Action tipli değişkenlerin asenkron çağrıların, BeginInvoke ile çağırdığımız metotları 
            // EndInvoke ile sonlandırılımalıdır sonuç dönsün ve varsa hafızadaki thread fırlatılsın.
            Action aksiyonParametresiz = DonussuzParametresizMetot;
            Console.WriteLine("BeginInvoke Öncesi: " + DateTime.Now.ToString());
            object o = null;
            IAsyncResult iResult = aksiyonParametresiz.BeginInvoke(delegate { Console.WriteLine("döndüm ben"); }, o);
            Console.WriteLine("BeginInvoke sonrası: " + DateTime.Now.ToString());
            while (!iResult.IsCompleted)
            {
                Console.WriteLine("BeginInvoke tamalanmadı: " + DateTime.Now.ToString());
                if (iResult.IsCompleted)
                {
                    Console.WriteLine("EndInvoke öncesi: " + DateTime.Now.ToString());
                    aksiyonParametresiz.EndInvoke(iResult);
                    Console.WriteLine("EndInvoke sonrası: " + DateTime.Now.ToString());
                }
                
            }

            #endregion

            Console.WriteLine("----------------- aksiyonParametreli ---------");
            #region Parametreli Action değişkeninin çalıştırılması
            int paramInt = 12;
            float paramFloat = 12f;
            Action<string, int, float> aksiyonParametreli = DonussuzParametreliMetot;
            aksiyonParametreli("param string", paramInt, paramFloat);
            #endregion

            Console.WriteLine("----------------- fonksiyonParametresiz ---------");
            Func<string> fonksiyonParametresiz = DonuslüParametresizMetot;
            string sDonenSonuc = fonksiyonParametresiz();

            Console.WriteLine("----------------- fonksiyonParametreli ---------");
            Func<string, int, float, int> fonksiyonParametreli = DonuslüParametreliMetot;
            Console.WriteLine("Invoke Öncesi: "+DateTime.Now.ToString());
            int iDonen = fonksiyonParametreli.Invoke("param param", 14, 10f);
            Console.WriteLine("Invoke Sonrası: " + DateTime.Now.ToString());
            
        }

        #region VOID dönüşlü metotlar ACTION ile referans edilebilir.
        static void DonussuzParametresizMetot()
        {
            int i = 0;
            while (i < 10)
            {
                Thread.Sleep(500);
                i++;
            }
            Console.WriteLine(DateTime.Now);
        }

        static void DonussuzParametreliMetot(string _s, int _i, float _f)
        {
            Console.WriteLine(DateTime.Now);
        } 
        #endregion

        #region DÖNÜŞ tipli metotlar FUNC ile değişkene atanabilir
        static string DonuslüParametresizMetot()
        {
            Console.WriteLine(DateTime.Now);
            return DateTime.Now.ToShortDateString();
        }

        static int DonuslüParametreliMetot(string _s, int _i, float _f)
        {
            int i = 0;
            while (i < 10)
            {
                Thread.Sleep(500);
                i++;
            }
            Console.WriteLine(DateTime.Now);
            return 19;
        } 
        #endregion

    }
}
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:47
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
27.02.2013 15:08:48
BeginInvoke tamalanmadı: 27.02.2013 15:08:48
EndInvoke öncesi: 27.02.2013 15:08:48
döndüm ben
EndInvoke sonrası: 27.02.2013 15:08:48
----------------- aksiyonParametreli ---------
27.02.2013 15:08:48
----------------- fonksiyonParametresiz ---------
27.02.2013 15:08:48
----------------- fonksiyonParametreli ---------
Invoke Öncesi: 27.02.2013 15:08:48
27.02.2013 15:08:53
Invoke Sonrası: 27.02.2013 15:08:53
Press any key to continue . . .
Action,Func ya da Predicate: Func vs. Action vs. Predicate
Action için Türkçe kaynak: http://www.yazilimdevi.com/Makaleler-1198-cSharp-action-tipini-dogru-kullanmak.aspx
Daha önceden yazdığım: Form harici bir sınıftan formun kontrollerine erişmek
Dışarıdan bir referans: www.muratguvenc.net
[Begin/End]Invoke Ne işe yarar: Delegate.BeginInvoke()/EndInvoke() implementation ve dotnetcurry.com

23 Ağustos 2012 Perşembe

Use the XmlInclude or SoapInclude attribute

Sorun:
The type was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.

Bazı çözümler:
www.johnsoer.com
http://www.codeproject.com

Benim sorunun kaynağı ise şuydu:
Web servisimin arkasına bir dll ile diğer web servisi işlemlerini hallediyordum. Web servisim aynı zamanda dll ile eriştiğim servise erişince sonuç veri tipi bir anda iki farklı namespace altında göründü. Sonuçta web sayfasında deserialization sorunu peyda oldu. Çözümü ise aşağıdaki kodda göründüğü üzere:
[XmlInclude(typeof(FMC.Turkiye.Facade.LabTest.BiolabTestleri.SonucOkuSonuc))]
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class BiolabIslemleri : System.Web.Services.WebService
    {

XmlInclude satırı ile çözmüş oldum. Burada yapmak istediğim SonucOkuSonuc sınıfının hangi namespace altında olduğunu tam olarak işaret etmemdir.

10 Şubat 2012 Cuma

Reflection

Ref: Aspect-Oriented Programming with C# and .NET [Wolfgang Schult and Andreas Polze | Hasso-Plattner-Institute at University Potsdam {wolfgang.schult|andreas.polze}@hpi.uni-potsdam.de]

Benim Notlarım

.NET defines a type system and introduces notions such as component, object, and interface, which are building blocks for distributed multi-language component-based applications.

As many other component frameworks, .NET mainly focuses on functional interfaces of components. Nonfunctional aspects of components, such as resource usage (CPU, memory), timing behavior, fault-tolerance, or security requirements are currently not expressed in .NET’s component interfaces.

There exist a number of distributed component frameworks, notably the
  1. Common Object Request Broker Architecture (CORBA)
  2. Microsoft’s Distributed Component Object Model (DCOM/COM+)
  3. SUN’s JavaBean Model
  4. .NET framework

3. Overview over the .NET Architecture

Almost a year ago, Microsoft has introduced the .NET architecture as a new component-based programming environment, which allows for easy integration of classical distributed programming techniques with Web computing. At the center of the .NET framework is an object model, called the Virtual Object System (VOS), and at center of the object model is a type system. The object model relies on basic concepts found in many objectoriented languages, such as class, inheritance, dynamic binding, class-based typing and so on. The object model is not, however, identical to the model of any of these languages. Rather, it’s an attempt to define a suitable base that bridges all these languages and others. The type system of .NET gives objects of predefined basic types, such as integers and characters, a clear place in the type system–and it provides a clean way to convert between reference and value types through "boxing" and "unboxing" operations. The result is a more coherent and regular type system than we have seen in the dominant languages so far.

Most importantly, this model is designed to be language-independent. The C# programming language directly reflects the .NET object model. NET’s focus is rather on the programming model than on any specific language. The .NET framework itself is languageindependent and attempts to provide a reasonable target to which all current languages can map. The framework enables compilers for multiple languages (namely C#, C++, VB) to share a common back end. Multilanguage component mechanisms have existed before, notably CORBA and COM. But they contain a major hurdle – one has to write an interface description in the appropriate interface definition language (IDL) for every component that you make available to the world. There is no IDL with .NET: You just use classes from other languages as if they were from your own. What this means for both component developers and component users is a dramatic simplification of the requirements put on any single development environment. You don’t need libraries addressing every application area. You provide components in your domains of expertise, where you can really bring added value. Where good libraries already exist, you benefit from them at no extra cost.

4. Metadata and Reflection in .NET

Reflection is a language mechanism, which allows access to type information during runtime. Reflection has been implemented for various object-oriented programming languages, among them Java, C#, and C++. C++ is somewhat special as it implements reflection rather as an add-on (RTTI - runtime type information) than as an inherent language feature. With .NET, reflection is not only restricted to a single language, but basically anything declared as code (any .NET assembly) can be inspected using reflection techniques. There are two variants of accessing runtime type information in .NET: the reflection classes in the common language runtime library and the unmanaged metadata interfaces.

4.1. Reflection via Runtime Library

The runtime library´s reflection classes are defined in the namespace of System.Reflection. They build on the fact that every type (class) is derived from Object. There is a public method named GetType, which has as return value an object of the type Type. This type is defined in the namespace System. Every type-instance represents one of three possible definitions:
  1. · a class definition
  2. · an interface definition
  3. · a value-class (usually a structure)
Via reflection, one may ask about almost every type attribute, including the type’s access-modifier, whether it is a nested type and about the type’s properties.
Metadata information is structured in a hierarchical fashion. At the highest level stands the class System.Reflection.Assembly. An assembly object corresponds to one or more dynamic libraries (DLLs) from which the .NET unit in question is composed. As depicted in Figure 1, class System.Reflection.Module stands on the next lower level of the metadata hierarchy. A module represents a single DLL. This module class accepts inquiries about the types the module contains. Proceeding further down the metadata hierarchy reveals type information for any of the building blocks making up a member of the .NET virtual object system.


· method (System.Reflection.MethodInfo)
· constructor(System.Reflection.ConstructorInfo )
· property (System.Reflection.PropertyInfo)
· field (System.Reflection.FieldInfo)
· event (System.Reflection.EventInfo)

Figure 2 presents an excerpt from a C++ program, which uses reflection to display all methods of a given type (MyCalculator in our case).

4.2. The Unmanaged Metadata Interfaces

The unmanaged metadata interfaces are a collection of COM interfaces that are accessible from “outside” of the .NET environment. You can access them from any
Windows program. The interface definition can be found in the COR.H, which is contained in the platform software development kit (platform SDK). The interface
IMetaDataImport.IMetaDataAssemblyImport is used for accessing metadata on the .NET assembly level. Access to this interface is obtained via a second interface,
called IMetadataDispenser. As the name indicates, this interface “dispenses” all kinds of additional metadata interfaces, which allow read and write access to .NET metadata. Access to the metadata dispenser is obtained via calls to the COM system as depicted in Figure 3 (here as C++ Code):

The IMetaDataImport interface obtained from the OpenScope() call provides access to the .NET assembly specified in the wszFileName Argument. Information
about the structure of classes contained in that particular .NET assembly and their building blocks is now accessible via functions EnumXXX and GetXXXProps. The
first function returns an enumeration of tokens describing the metadata available, the latter one returns information about the metadata’s properties, which correspond to a particular token. In addition to the token there exists a special way of type encoding. The function GetMethodProps for example gives an array of the type PCOR_SIGNATURE as return value. This array contains the signature of the queried element. The same information can be obtained by multiple calls to EnumXXX and GetXXXProps, however, using the signatures is the more direct approach. Signatures contain only pure type information, whereas GetXXXProps methods reveal also formal parameter names.

5. A C# Attribute to express Fault-tolerance Requirements

Within this Section we are presenting a simple calculator in C# as a case study. We use the calculator as basis for a discussion on how functional (C#) and nonfunctional (aspect) code can be combined.

18 Aralık 2011 Pazar

XML Serileştirmede NonSerialized ve XmlIgnore farkı

Ref: How to ignore a field/property during serialization

The first attribute, [NonSerialized], should be applied to field members and informs the standard serialization methods to ignore the field. The second attribute, [System.Xml.Serialization.XmlIgnore], should be applied to public properties and informs the Xml Serializer to ignore the property. The combination of the two should be enough to stop the field from being serialized regardless of the serializer the client chooses to use.
Quick pseudo example:

[NonSerialized],
private SomeUnFriendlyType myType:

[System.Xml.Serialization.XmlIgnore]
public SomeUnFriendlyType MyType()


Benim takıldığım durumda:
[Serializable]
    public class KurumBilgileri:MedulaServisleri
    {
        public string SaglikTesisKodu;
        public string SaglikTesisSifresi;
        public string BransKodu;
        public string TedaviTuru;
        public string TedaviTipi;
        /// 
        /// 
        /// 
        public string ProvizyonTipi;

        private string m_XmlFileName = "SaglikTesisBilgileri.xml";

        public KurumBilgileri()
        {
        }

Tabi MedulaServislerinide görmek gerek:
[Serializable]
    public class MedulaServisleri
    {

        //[NonSerialized]
        [XmlIgnore]
        public HastaKabulIslemleriService hki;

        public MedulaServisleri()
        {
            hki = new HastaKabulIslemleriService();
        }
    }

Eğer ata sınıftaki(MedulaServisleri) hki değişkenini protected yaparsam hata fırlatılmıyordu. Çünkü [NonSerialized] özelliğini kullanıyordum. Ama public yaptığımda gümlüyordu. Bu kezde [XmlIgnore] özelliği imdada yetişiyor. Tamda yukarıda makalesini verdiğim elemanın dediği gibi.

8 Aralık 2011 Perşembe

CSharp ile Ftp Upload

Kodu:
void f_UploadContents()
{
    // Get the object used to communicate with the server.
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
    request.Method = WebRequestMethods.Ftp.UploadFile;

    // This example assumes the FTP site uses anonymous logon.
    request.Credentials = new NetworkCredential("anonymous", "janeDoe@contoso.com");

    // Copy the contents of the file to the request stream.
    StreamReader sourceStream = new StreamReader("testfile.txt");
    byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
    sourceStream.Close();
    request.ContentLength = fileContents.Length;

    Stream requestStream = request.GetRequestStream();
    requestStream.Write(fileContents, 0, fileContents.Length);
    requestStream.Close();

    FtpWebResponse response = (FtpWebResponse)request.GetResponse();

    Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);

    response.Close();
}

CSharp ile internet bağlantısı var mı yok mu kontrolü

Güzel bir P/Invoke kodu:
    public class InternetCS
    {
        //Creating the extern function...
        [DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);

        //Creating a function that uses the API function...
        public static bool IsConnectedToInternet()
        {
            int Desc;
            return InternetGetConnectedState(out Desc, 0);
        }
    }

Bu da ping atan kod:
static void checkInternetConnExists()
{
    try
    {
        Ping ping = new Ping();
        string sHost = "www.zuppa.com";
        string sResponse = "";
        PingReply pingreply = ping.Send(sHost);
        sResponse += "Address: " + pingreply.Address + "\n";
        sResponse += "Roundtrip Time: " + pingreply.RoundtripTime + "\n";
        sResponse += "TTL (Time To Live): " + pingreply.Options.Ttl + "\n";
        sResponse += "Buffer Size: " + pingreply.Buffer.Length.ToString() + "\n";
        Console.WriteLine(sResponse);
    }
    catch (Exception err)
    {
        Console.WriteLine(err.Message);
    }
}

4 Ağustos 2011 Perşembe

Web User Control 'den Web Servisi çağırmak

Bir önceki makalemde bir web servisinden dll ler oluşturma ve bunu GAC'a yüklemeden bahsetmiştim.

Şimdi GAC'daki bu DLL'i kullanarak bir web user control içinden, code behind olmadan .ascx dosyasından nasıl bu servise erişirizi yazayım.

WUC'da .ascx dosyasında tüketmek istiyorum çünkü bu dosyayı daha sonra derlemek istemiyorum.


Kısa ve özet haliyle:
<%@ Control Language="C#" ClassName="wuc" %>
<%@ Import Namespace="System.Reflection" %>


<script runat="server">
protected override void CreateChildControls()
{
base.CreateChildControls();
// deneme.dll 'imiz GAC'a yüklü ve çekiyoruz
object obj = Activator.CreateInstance("deneme, Version=0.0.0.0, Culture=neutral, PublicKeyToken=dc5cbb4d7c01cc5e", "Service1").Unwrap();
Type tip = obj.GetType();
MethodInfo miTopla = tip.GetMethod("HelloWorld");

btn.Text = miTopla.Invoke(obj, null).ToString();
}
</script>

<asp:Button runat="server" ID="btn" Text="asdasd" />


işte daha detaylandırdığım ascx in codu:

<%@ Control Language="C#" ClassName="WebUserControl" %>
<%@ Import Namespace="System.Reflection" %>
<script runat="server">

public class GenerateObject
{
public enum WebServicesClass
{
HastaRaporlariServisi, Yardimci
}
const string sAsmNameHastaRaporlari = "HastaRaporlari, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0b0b7e799bda4cb2";
const string sHastaRaporlariServisi = "HastaRaporlariServisi";
const string sAsmNameYardimci = "HastaRaporlari, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0b0b7e799bda4cb2";
const string sYardimciServisi = "YardimciServisi";

public static object CreateInstance(WebServicesClass _wsc)
{
try
{
switch (_wsc)
{
case WebServicesClass.HastaRaporlariServisi:
return Activator.CreateInstance(sAsmNameHastaRaporlari, sHastaRaporlariServisi).Unwrap();
case WebServicesClass.Yardimci:
return Activator.CreateInstance(sAsmNameYardimci, sYardimciServisi).Unwrap();
default:
return null;
}
}
catch (Exception ex)
{
throw;
}
}

public static MethodInfo GetMethod(object _obj, string _sMethodName)
{
try
{
Type tip = _obj.GetType();
MethodInfo mi = tip.GetMethod(_sMethodName);
return mi;
}
catch (Exception ex)
{
throw;
}
}

public static object Invoke(object _obj, string _sMethodName, params object[] _params)
{
object result = GenerateObject.GetMethod(_obj, _sMethodName).Invoke(_obj, _params);
return result;
}


public static object Invoke(WebServicesClass _wsc, string _sMethodName, params object[] _params)
{
object instance = GenerateObject.CreateInstance(_wsc);
object result = GenerateObject.GetMethod(instance, _sMethodName).Invoke(instance, _params);
return result;
}

}
protected override void CreateChildControls()
{
base.CreateChildControls();

btn.Text = GenerateObject.Invoke(GenerateObject.WebServicesClass.HastaRaporlariServisi,"tistring",null).ToString();
}
</script>
<asp:Button runat="server" ID="btn" Text="asdasd" />

Yukarıdaki uzun kodu değişmeyecek olan GenerateObject sınıfını bir .inc dosyasına koyarak ascx'e çekmek isterseniz şu şekilde olacaktır:
<script runat="server">

public class GenerateObject
{
public enum WebServicesClass
{
HastaRaporlariServisi, Yardimci
}
const string sAsmNameHastaRaporlari = "HastaRaporlari, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0b0b7e799bda4cb2";
const string sHastaRaporlariServisi = "HastaRaporlariServisi";
const string sAsmNameYardimci = "HastaRaporlari, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0b0b7e799bda4cb2";
const string sYardimciServisi = "YardimciServisi";

public static object CreateInstance(WebServicesClass _wsc)
{
try
{
switch (_wsc)
{
case WebServicesClass.HastaRaporlariServisi:
return Activator.CreateInstance(sAsmNameHastaRaporlari, sHastaRaporlariServisi).Unwrap();
case WebServicesClass.Yardimci:
return Activator.CreateInstance(sAsmNameYardimci, sYardimciServisi).Unwrap();
default:
return null;
}
}
catch (Exception ex)
{
throw;
}
}

public static MethodInfo GetMethod(object _obj, string _sMethodName)
{
try
{
Type tip = _obj.GetType();
MethodInfo mi = tip.GetMethod(_sMethodName);
return mi;
}
catch (Exception ex)
{
throw;
}
}

public static object Invoke(object _obj, string _sMethodName, params object[] _params)
{
object result = GetMethod(_obj, _sMethodName).Invoke(_obj, _params);
return result;
}


public static object Invoke(WebServicesClass _wsc, string _sMethodName, params object[] _params)
{
object instance = CreateInstance(_wsc);
object result = GetMethod(instance, _sMethodName).Invoke(instance, _params);
return result;
}

}
</script>

Bu durumda ascx dosyamızda:
<%@ Control Language="C#" ClassName="WebUserControl" %>
<%@ Import Namespace="System.Reflection" %>
<%@ Import Namespace="FMC.Google.Chart.Visualization" %>

<!-- #include virtual="Generator.inc" -->

<script runat="server">
protected override void CreateChildControls()
{
base.CreateChildControls();

btn.Text = GenerateObject.Invoke(GenerateObject.WebServicesClass.HastaRaporlariServisi, "tistring", null).ToString();
}
</script>


GenerateObject sınıfı ile daha hızlı bir şekilde metod çağrısı yapabiliyorum.

Bu ascx dosyasını kullanacağım Default.aspx dosyam:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

<uc1:WebUserControl ID="WebUserControl1" runat="server" />

</div>
</form>
</body>
</html>

6 Temmuz 2011 Çarşamba

Nesne Yönelimli Programla Nedir? başlıklı anlatımımın notları

Interface


ILDASM


VIRTUAL


BASE


ABSTRACT



using System;
using System.Collections.Generic;
using Fresenius.Turkiye.Dersler.CSharp.OOP;
using Fresenius.Turkiye.Dersler.CSharp.OOP.Abstract;
using Fresenius.Turkiye.Dersler.CSharp.OOP.Interface;

namespace ConsoleApplication3
{
class Program
{
static void Main()
{
#region Genel
try
{
Kisi kisi = new Kisi('E', "Cem", "Topkaya", "83450930945", DateTime.Now);
Ogrenci og = new Ogrenci()
{
OgrenciNo = 111,
Sinifi = 2,
mDersleri = new List()
{
new Ders()
{
Adi = "Coğrafya",
Dersligi = "C101"
},
new Ders()
{
Adi = "Matematik",
Dersligi = "Mat101"
}
}
};
}
catch (ArgumentOutOfRangeException aor)
{
Console.WriteLine("Başlangıç parametleri hatalıdır.");
Console.WriteLine("İstisna: " + aor.ToString());
}
catch (Exception e)
{
throw (e);
}
#endregion

#region interface anlatımı
Akitler akit = new Akitler();
IKontrat kontrat = new Akitler();
IKontrat contract = new Contracts();
kontrat.Anlas();
kontrat.Boz(1);

contract.Anlas();
contract.Boz(1);

Console.WriteLine(kontrat.GetType());
Console.WriteLine(contract.GetType());
#endregion

#region Abstract
AKontrat ak1 = new Akit();
AKontrat ak2 = new Contract();

Akit akt = new Akit();
#endregion
}
}
}

namespace Fresenius.Turkiye.Dersler.CSharp.OOP.Abstract
{
public abstract class AKontrat
{
public abstract void Anlas();
protected abstract bool Boz(int _iAnlasmaId);

public void OrtakMetot()
{
// code....
}
}

public class Akit : AKontrat
{
public override void Anlas() { }
protected override bool Boz(int _iAnlasmaId) { return false; }
}

public class Contract:AKontrat
{
public override void Anlas() { }
protected override bool Boz(int _iAnlasmaId) { return false; }
}
}

namespace Fresenius.Turkiye.Dersler.CSharp.OOP
{
class Kisi
{
#region Props & Backing Fields
char mCinsiyet;
///
/// Cinsiyet bilgisini içerir. Sadece 'E' ve 'K' karakterlerini alır.
///

public char Sex
{
get
{
// if (mCinsiyet != 'E' && mCinsiyet != 'K') : Henüz değer atanmamış
// {
// DB bağlantısı kur,
// TC Kimlikten elemanın cinsiyetini çek
// DB bağlantısını kapat
// mCinsiyet = bulunanDeger
// }
// return mCinsiyet;
return mCinsiyet;
}
set
{
char[] kabulEdilenDegerler = new[] { 'E', 'K' };
foreach (char cDeger in kabulEdilenDegerler)
{
if (cDeger.Equals(value))
{
mCinsiyet = value;
return;
}
}


throw new ArgumentOutOfRangeException();

}
}
#endregion


#region Fields
string mTcKimlik;
string mAdi;
string mSoyadi;
DateTime mDogumTarihi;
#endregion


#region Constructor (Yapıcı) Metotlar
public Kisi(char _cinsiyet, string _adi, string _soyadi, string _tc, DateTime _dogum)
{

if (_cinsiyet != 'E' && _cinsiyet != 'K')
{
throw new ArgumentOutOfRangeException("Cinsiyet E ya da K olmak zorundadır.");
}
mCinsiyet = _cinsiyet;
mAdi = _adi;
mSoyadi = _soyadi;
mTcKimlik = _tc;
mDogumTarihi = _dogum;


#region this ayrımını yapmak için
char Sex = 'A';
this.Sex = _cinsiyet;
#endregion
}

public Kisi()
{

}
#endregion

protected string SadeceAltSiniftan()
{
return base.ToString();
}

public string TumBilgiler()
{
string sonuc;
sonuc = String.Format("Adı: {0}\nSoyadı: {1}", mAdi, mSoyadi);
return sonuc;
}

public override string ToString()
{
string sonuc;

sonuc = "üst sınıftan gelen: " + base.ToString();
sonuc += "\nEzilmiş metodun dönen değeri.";

return sonuc;
}

}

class Ogrenci : Kisi
{
private int mOgrenciNo;
public int OgrenciNo
{
get { return mOgrenciNo; }
set { mOgrenciNo = value; }
}

private int mSinifi;
public int Sinifi
{
get { return mSinifi; }
set { mSinifi = value; }
}

public List mDersleri = new List();


public Ogrenci()
{
Ders dersi = new Ders()
{
Adi = "Tarih",
Dersligi = "T101"
};
mDersleri.Add(dersi);

}
}

public class Ders
{
public string Adi { get; set; }
public string Dersligi { get; set; }
}
}
namespace Fresenius.Turkiye.Dersler.CSharp.OOP.Interface
{
public interface IKontrat
{
void Anlas();
bool Boz(int _iAnlasmaId);
}

public class Akitler : IKontrat
{
public void Anlas() { }
public bool Boz(int _iAnlasmaId) { return true; }

public void AkitMetodu() { }
}

public class Contracts : IKontrat
{
public void Anlas() { }
public bool Boz(int _iAnlasmaId) { return true; }

public void ContractMethod() { }
}
}

// Program : Çalışmayan ama çalıştırılabilen dosya
// Process : Programın RAM üzerine alındığı (yani çalıştırıldığı) hali

// Ezgi : Object (Bir sınıftan türeyen nesne)
// Ogrenci : Class (Bir varlığın bilgi/eylemlerini içeren yapı sınıftır)
// Kisi : Class (Class aynı zamanda Tip tir)


// dll(dynamic link library),exe : Assembly
// Ne kodu olursa olsun en az 1 class vardır.
// CSharp : %100 OO
// Executable uygulamalarda başlangıç noktası(entry point) Main fonksiyonudur.

// Hiyerarşik gruplandırma sistemidir.
// namespace HizliBilisim.Media.Sound.Recording { }
// namespace HizliBilisim.Media.Video.Editing { }

// Yapıcı metotlar nesenin başlatıldığı noktaya erişmemizi sağlar. Bu sayede başlangıç değerlerinin uygunluğunu kontrol edebiliriz.
// Default Constructor (Yapıcı Metot) parametresizdir: SınıfınAdı() {}
// Sınıf içinde tanımlı hiç yapıcı metot yoksa compiler otomatik olarak yapıcı metot ekler.
// Parametre alan diğer yapıcı metotlar Overloaded (aşırı yüklenmiş) metotlardır.

// Sınıfa bağlı özellik veya metotlara erişebilmek için, onları "public static " ile tanımlamız gerekir.

// Ctrl + H : find & replace
// Ctrl + K , D : Kodu düzenle
// F9 : Break Point eklemek.
// F5 : Çalıştır
// F10 : Satırın kodunu çalıştır ilerle
// F11 : Satırın içine git ilerle
// Ctrl + K,S kod bloğunu sarmak için

// region ile kodları daraltabiliyoruz.

// override : üst sınıfta tanımlı metodun alt sınıfta ezilerek tekrar yazılmasıdır.
// base : üst sınıfı işaret eder.
// unreachable code : örneğin, return den sonraki satırlar

// public : Umuma açık
// private : Sadece sınıfın içinden erişilebilen
// protected : Türetilen sınıfın içinden ulaşılabilen (Hiç bir obje erişemez).
// property içindeki get ve set metotları eğer {get;set;} şekilde ise, IL koduna compiler tarafından otomatik olarak eklenirler.
// Backing Field : property içinde set ve get edilen sınıf değişkenleridir(Sınıf değişkenleri(field) global değişkenlerdir ve tüm sınıf içinden erişilebilirler).

// Exception : İstisnaları sınıflandırmak ve istisnaya uygun eylemleri gerçekleştirmek için kullanırız.
// İstisnalarda en üst sınıf Exception, alt sınıflar daha belirli istisnaları işaret eder.

// IL : Intermediate Language (Ara dil): .NET içinde yazılan her dilin framework tarafından anlaşılabilen ortak dili

// Encapsulation : Kapsulleyerek erişimini yalıtma.

// Polymorphism : Bir sınıfa bir ya da daha fazla üst sınıf atanabilmesi hali.

// this, bulunduğumuz yeri (yani sınıf) işaret eder.

// virtual : alt sınıf tarafından ezilebilir demektir ve metod imzasına eklenir (protected virtual void ff())

// Dizi başlatıldığı anda boyutu verilmek zorundadır.
// List değişkenlerin boyutu her hangi bir anda değişebilir. Bu yüzden dizilere göre daha yavaştır.

// interface : Arayüzü uygulayan sınıflara tanımlaması mecburi metotların imzasını(metot gövdesi olmayan kısmı) içerir. Bir kontrattır ve aynı zaman ortak tip demektir.
// arayüzlerden nesne türetilemez. Sadece concrete class lardan obje türetilebilir.
// arayüzlerdeki tüm metot imzaları varsayılan olarak public tir. Ve Accessor Type verilemez(public, private, protected yazılamaz).

// abstract sınıflar interface ile sınıf arasındaki yapılardır ve bu yapılardan nesne üretilemez.
// abstract sınıflarda belirtilen abstract metotlar public ya da protected erişim belirleyicisi alabilirler.
// abstract sınıflar gövdesi olan metotlarıda içerebilir. Bu metotlar istenirse alt sınıflara(protected) ya da nesnelere(public) kullandırılabilir. Bu sayede ortak metotları "abstract class" içinde bir kere yazmış oluruz.