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Çıktısı: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); } } } } }
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
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
(GetValues ya da GetValuesMap), ile tek çağrıda birden fazla anahtarın değerini alabiliriz.
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.
Sonuç:
Farklı anahtar için veri girişi:
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ıyor127.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 deetiketinin ö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.
XmlAttribute bir yerde tanımlıysa, o field ya da property nin tipindeki(class,struct vs.)
KitapItem sınıfının Title fieldı için farklı bir namespace tanımladık (attribute_namepseysi) ve bunun için
Enum gösterimi için
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
Etiketler:
C#,
IsNullable,
Serialization,
XML,
XmlArray,
XmlArrayItem,
XmlAttribute,
XmlEnum,
XmlIgnore,
XmlInclude,
XmlSerializer,
XmlType
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.
Kodumuz şöyle olacak:
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>
Etiketler:
BinaryFormatter,
C#,
JSON,
Serialization,
SoapFormatter,
XmlSerializer
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:
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 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.
The typewas 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]
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
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.
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.
Figure 2 presents an excerpt from a C++ program, which uses reflection to display all methods of a given type (MyCalculator in our case).
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.
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
- Common Object Request Broker Architecture (CORBA)
- Microsoft’s Distributed Component Object Model (DCOM/COM+)
- SUN’s JavaBean Model
- .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:- · a class definition
- · an interface definition
- · a value-class (usually a structure)
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 anyWindows 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:
Benim takıldığım durumda:
Tabi MedulaServislerinide görmek gerek:
Eğer ata sınıftaki(MedulaServisleri) hki değişkenini protected yaparsam hata fırlatılmıyordu. Çünkü
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(); }
Etiketler:
C#,
FTP,
FtpWebRequest,
FtpWebResponse,
GetResponse,
Kod,
StreamReader,
Upload,
WebRequestMethods
CSharp ile internet bağlantısı var mı yok mu kontrolü
Güzel bir P/Invoke kodu:
Bu da ping atan kod:
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); } }
Etiketler:
C#,
Connection State,
P/INVOKE,
Ping,
Platform Invoke,
RoundtripTime,
Ttl
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
WUC'da .ascx dosyasında tüketmek istiyorum çünkü bu dosyayı daha sonra derlemek istemiyorum.
Kısa ve özet haliyle:
işte daha detaylandırdığım ascx in codu:
Yukarıdaki uzun kodu değişmeyecek olan GenerateObject sınıfını bir
Bu durumda ascx dosyamızda:
Bu ascx dosyasını kullanacağım Default.aspx dosyam:
Ş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>
Etiketler:
Activator,
ASCX,
C#,
GAC,
Global Assembly Cache,
include,
Web Service,
Web User Control
6 Temmuz 2011 Çarşamba
Nesne Yönelimli Programla Nedir? başlıklı anlatımımın notları
Interface
ILDASM
VIRTUAL
BASE
ABSTRACT
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 ListmDersleri = 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.
Kaydol:
Kayıtlar (Atom)