lasssstttt

This commit is contained in:
Melih Mucuk 2014-12-31 19:30:07 +02:00
parent 9b1b260c6c
commit 765e4d3be9

View File

@ -153,7 +153,7 @@ on a new line! ""Wow!"", the masses cried";
List<int> intList = new List<int>(); List<int> intList = new List<int>();
List<string> stringList = new List<string>(); List<string> stringList = new List<string>();
List<int> z = new List<int> { 9000, 1000, 1337 }; // tanımlama List<int> z = new List<int> { 9000, 1000, 1337 }; // tanımlama
// <> işareti genelleme içindir - Güzel özellikler sekmesini inceleyin // <> işareti generic ifadeler içindir - Güzel özellikler sekmesini inceleyin
// Listelerin varsayılan bir değeri yoktur; // Listelerin varsayılan bir değeri yoktur;
// İndekse erişmeden önce değer eklenmiş olmalıdır // İndekse erişmeden önce değer eklenmiş olmalıdır
@ -342,39 +342,39 @@ on a new line! ""Wow!"", the masses cried";
Console.Read(); Console.Read();
} // Ana metodun sonu } // Ana metodun sonu
// CONSOLE ENTRY A console application must have a main method as an entry point // KONSOLE BAŞLANGICI Bir konsol uygulaması başlangıç olarak mutlaka ana metod'a sahip olmalı
public static void Main(string[] args) public static void Main(string[] args)
{ {
OtherInterestingFeatures(); OtherInterestingFeatures();
} }
// //
// INTERESTING FEATURES // İLGİNÇ ÖZELLİKLER
// //
// DEFAULT METHOD SIGNATURES // VARSAYILAN METOD TANIMLAMALARI
public // Visibility public // Görünebilir
static // Allows for direct call on class without object static // Sınıf üzerinden obje türetmeden çağırılabilir
int // Return Type, int // Dönüş Tipi,
MethodSignatures( MethodSignatures(
int maxCount, // First variable, expects an int int maxCount, // İlk değişken, int değer bekler
int count = 0, // will default the value to 0 if not passed in int count = 0, // Eğer değer gönderilmezse varsayılan olarak 0 değerini alır
int another = 3, int another = 3,
params string[] otherParams // captures all other parameters passed to method params string[] otherParams // Metoda gönderilen diğer bütün parametreleri alır
) )
{ {
return -1; return -1;
} }
// Methods can have the same name, as long as the signature is unique // Metodlar tanımlamalar benzersiz ise aynı isimleri alabilirler
public static void MethodSignatures(string maxCount) public static void MethodSignatures(string maxCount)
{ {
} }
// GENERICS // GENERIC'LER
// The classes for TKey and TValue is specified by the user calling this function. // TKey ve TValue değerleri kullanıcı tarafından bu fonksiyon çağırılırken belirtilir.
// This method emulates the SetDefault of Python // Bu metod Python'daki SetDefault'a benzer
public static TValue SetDefault<TKey, TValue>( public static TValue SetDefault<TKey, TValue>(
IDictionary<TKey, TValue> dictionary, IDictionary<TKey, TValue> dictionary,
TKey key, TKey key,
@ -386,68 +386,66 @@ on a new line! ""Wow!"", the masses cried";
return result; return result;
} }
// You can narrow down the objects that are passed in // Gönderilen objeleri daraltabilirsiniz
public static void IterateAndPrint<T>(T toPrint) where T: IEnumerable<int> public static void IterateAndPrint<T>(T toPrint) where T: IEnumerable<int>
{ {
// We can iterate, since T is a IEnumerable // Eğer T IEnumerable ise tekrarlayabiliriz
foreach (var item in toPrint) foreach (var item in toPrint)
// Item is an int // Item bir int
Console.WriteLine(item.ToString()); Console.WriteLine(item.ToString());
} }
public static void OtherInterestingFeatures() public static void OtherInterestingFeatures()
{ {
// OPTIONAL PARAMETERS // İSTEĞE BAĞLI PARAMETRELER
MethodSignatures(3, 1, 3, "Some", "Extra", "Strings"); MethodSignatures(3, 1, 3, "Some", "Extra", "Strings");
MethodSignatures(3, another: 3); // explicity set a parameter, skipping optional ones MethodSignatures(3, another: 3); // isteğe bağlı olanlar gönderilmedi
// EXTENSION METHODS // UZANTI METODLARI
int i = 3; int i = 3;
i.Print(); // Defined below i.Print(); // Aşağıda tanımlandı
// NULLABLE TYPES - great for database interaction / return values // NULLABLE TYPES - veri tabanı işlemleri için uygun / return values
// any value type (i.e. not a class) can be made nullable by suffixing a ? // Herhangi bir değer tipi sonuna ? eklenerek nullable yapılabilir (sınıflar hariç)
// <type>? <var name> = <value> // <tip>? <değiken ismi> = <değer>
int? nullable = null; // short hand for Nullable<int> int? nullable = null; // Nullable<int> için kısa yol
Console.WriteLine("Nullable variable: " + nullable); Console.WriteLine("Nullable variable: " + nullable);
bool hasValue = nullable.HasValue; // true if not null bool hasValue = nullable.HasValue; // eğer null değilse true döner
// ?? is syntactic sugar for specifying default value (coalesce) // ?? varsayılan değer belirlemek için söz dizimsel güzel bir özellik
// in case variable is null // bu durumda değişken null'dır
int notNullable = nullable ?? 0; // 0 int notNullable = nullable ?? 0; // 0
// IMPLICITLY TYPED VARIABLES - you can let the compiler work out what the type is: // TİPİ BELİRTİLMEMİŞ DEĞİŞKENLER - compiler değişkenin tipini bilmeden çalışabilir:
var magic = "magic is a string, at compile time, so you still get type safety"; var magic = "magic is a string, at compile time, so you still get type safety";
// magic = 9; will not work as magic is a string, not an int // magic = 9; string gibi çalışmayacaktır, bu bir int değil
// GENERICS // GENERIC'LER
// //
var phonebook = new Dictionary<string, string>() { var phonebook = new Dictionary<string, string>() {
{"Sarah", "212 555 5555"} // Add some entries to the phone book {"Sarah", "212 555 5555"} // Telefon rehberine bir kaç numara ekleyelim.
}; };
// Calling SETDEFAULT defined as a generic above // Yukarıda generic olarak tanımlanan SETDEFAULT'u çağırma
Console.WriteLine(SetDefault<string,string>(phonebook, "Shaun", "No Phone")); // No Phone Console.WriteLine(SetDefault<string,string>(phonebook, "Shaun", "No Phone")); // Telefonu yok
// nb, you don't need to specify the TKey and TValue since they can be // TKey ve TValue tipini belirtmek zorunda değilsiniz
// derived implicitly
Console.WriteLine(SetDefault(phonebook, "Sarah", "No Phone")); // 212 555 5555 Console.WriteLine(SetDefault(phonebook, "Sarah", "No Phone")); // 212 555 5555
// LAMBDA EXPRESSIONS - allow you to write code in line // LAMBDA IFADELERİ - satır içinde kod yazmanıza olanak sağlar
Func<int, int> square = (x) => x * x; // Last T item is the return value Func<int, int> square = (x) => x * x; // Son T nesnesi dönüş değeridir
Console.WriteLine(square(3)); // 9 Console.WriteLine(square(3)); // 9
// DISPOSABLE RESOURCES MANAGEMENT - let you handle unmanaged resources easily. // TEK KULLANIMLIK KAYNAK YÖNETİMİ - Yönetilemeyen kaynakların üstesinden kolayca gelebilirsiniz.
// Most of objects that access unmanaged resources (file handle, device contexts, etc.) // Bir çok obje yönetilemeyen kaynaklara (dosya yakalama, cihaz içeriği, vb.)
// implement the IDisposable interface. The using statement takes care of // IDisposable arabirimi ile erişebilir. Using ifadesi sizin için IDisposable objeleri temizler.
// cleaning those IDisposable objects for you.
using (StreamWriter writer = new StreamWriter("log.txt")) using (StreamWriter writer = new StreamWriter("log.txt"))
{ {
writer.WriteLine("Nothing suspicious here"); writer.WriteLine("Nothing suspicious here");
// At the end of scope, resources will be released. // Bu bölümün sonunda kaynaklar temilenir.
// Even if an exception is thrown. // Hata fırlatılmış olsa bile.
} }
// PARALLEL FRAMEWORK // PARALEL FRAMEWORK
// http://blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-programming-in-net-framework-4-getting-started.aspx // http://blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-programming-in-net-framework-4-getting-started.aspx
var websites = new string[] { var websites = new string[] {
"http://www.google.com", "http://www.reddit.com", "http://www.google.com", "http://www.reddit.com",
@ -455,73 +453,71 @@ on a new line! ""Wow!"", the masses cried";
}; };
var responses = new Dictionary<string, string>(); var responses = new Dictionary<string, string>();
// Will spin up separate threads for each request, and join on them // Her istek farklı bir thread de işlem görecek
// before going to the next step! // bir sonraki işleme geçmeden birleştirilecek.
Parallel.ForEach(websites, Parallel.ForEach(websites,
new ParallelOptions() {MaxDegreeOfParallelism = 3}, // max of 3 threads new ParallelOptions() {MaxDegreeOfParallelism = 3}, // en fazla 3 thread kullanmak için
website => website =>
{ {
// Do something that takes a long time on the file // Uzun sürecek bir işlem yapın
using (var r = WebRequest.Create(new Uri(website)).GetResponse()) using (var r = WebRequest.Create(new Uri(website)).GetResponse())
{ {
responses[website] = r.ContentType; responses[website] = r.ContentType;
} }
}); });
// This won't happen till after all requests have been completed // Bütün istekler tamamlanmadan bu döndü çalışmayacaktır.
foreach (var key in responses.Keys) foreach (var key in responses.Keys)
Console.WriteLine("{0}:{1}", key, responses[key]); Console.WriteLine("{0}:{1}", key, responses[key]);
// DYNAMIC OBJECTS (great for working with other languages) // DİNAMİK OBJELER (diğer dillerle çalışırken kullanmak için uygun)
dynamic student = new ExpandoObject(); dynamic student = new ExpandoObject();
student.FirstName = "First Name"; // No need to define class first! student.FirstName = "First Name"; // Önce yeni bir sınıf tanımlamanız gerekmez!
// You can even add methods (returns a string, and takes in a string) // Hatta metod bile ekleyebilirsiniz (bir string döner, ve bir string alır)
student.Introduce = new Func<string, string>( student.Introduce = new Func<string, string>(
(introduceTo) => string.Format("Hey {0}, this is {1}", student.FirstName, introduceTo)); (introduceTo) => string.Format("Hey {0}, this is {1}", student.FirstName, introduceTo));
Console.WriteLine(student.Introduce("Beth")); Console.WriteLine(student.Introduce("Beth"));
// IQUERYABLE<T> - almost all collections implement this, which gives you a lot of // IQUERYABLE<T> - neredeyse bütün koleksiyonlar bundan türer, bu size bir çok
// very useful Map / Filter / Reduce style methods // kullanışlı Map / Filter / Reduce stili metod sağlar.
var bikes = new List<Bicycle>(); var bikes = new List<Bicycle>();
bikes.Sort(); // Sorts the array bikes.Sort(); // Dizi sıralama
bikes.Sort((b1, b2) => b1.Wheels.CompareTo(b2.Wheels)); // Sorts based on wheels bikes.Sort((b1, b2) => b1.Wheels.CompareTo(b2.Wheels)); // Wheels baz alınarak sıralama
var result = bikes var result = bikes
.Where(b => b.Wheels > 3) // Filters - chainable (returns IQueryable of previous type) .Where(b => b.Wheels > 3) // Filters- chainable (bir önceki tipin IQueryable'ını döner)
.Where(b => b.IsBroken && b.HasTassles) .Where(b => b.IsBroken && b.HasTassles)
.Select(b => b.ToString()); // Map - we only this selects, so result is a IQueryable<string> .Select(b => b.ToString()); // Map - sadece bunu seçiyoruz, yani sonuç bir IQueryable<string> olacak
var sum = bikes.Sum(b => b.Wheels); // Reduce - sums all the wheels in the collection var sum = bikes.Sum(b => b.Wheels); // Reduce - koleksiyonda bulunan bütün wheel değerlerinin toplamı
// Create a list of IMPLICIT objects based on some parameters of the bike // Bike içindeki bazı parametreleri baz alarak bir liste oluşturmak
var bikeSummaries = bikes.Select(b=>new { Name = b.Name, IsAwesome = !b.IsBroken && b.HasTassles }); var bikeSummaries = bikes.Select(b=>new { Name = b.Name, IsAwesome = !b.IsBroken && b.HasTassles });
// Hard to show here, but you get type ahead completion since the compiler can implicitly work // Burada göstermek zor ama, compiler yukaridaki tipleri çözümleyebilirse derlenmeden önce tipi verebilir.
// out the types above!
foreach (var bikeSummary in bikeSummaries.Where(b => b.IsAwesome)) foreach (var bikeSummary in bikeSummaries.Where(b => b.IsAwesome))
Console.WriteLine(bikeSummary.Name); Console.WriteLine(bikeSummary.Name);
// ASPARALLEL // ASPARALLEL
// And this is where things get wicked - combines linq and parallel operations // Linq ve paralel işlemlerini birleştirme
var threeWheelers = bikes.AsParallel().Where(b => b.Wheels == 3).Select(b => b.Name); var threeWheelers = bikes.AsParallel().Where(b => b.Wheels == 3).Select(b => b.Name);
// this will happen in parallel! Threads will automagically be spun up and the // bu paralel bir şekilde gerçekleşecek! Threadler otomatik ve sihirli bir şekilde işleri paylaşacak!
// results divvied amongst them! Amazing for large datasets when you have lots of // Birden fazla çekirdeğiniz varsa büyük veri setleri ile kullanmak için oldukça uygun bir yapı.
// cores
// LINQ - maps a store to IQueryable<T> objects, with delayed execution // LINQ - IQueryable<T> objelerini mapler ve saklar, gecikmeli bir işlemdir
// e.g. LinqToSql - maps to a database, LinqToXml maps to an xml document // e.g. LinqToSql - veri tabanını mapler, LinqToXml xml dökümanlarını mapler.
var db = new BikeRepository(); var db = new BikeRepository();
// execution is delayed, which is great when querying a database // işlem gecikmelidir, bir veri tabanı üzerinde sorgulama yaparken harikadır.
var filter = db.Bikes.Where(b => b.HasTassles); // no query run var filter = db.Bikes.Where(b => b.HasTassles); // sorgu henüz çalışmadı
if (42 > 6) // You can keep adding filters, even conditionally - great for "advanced search" functionality if (42 > 6) // Filtreler eklemeye devam edebilirsiniz - ileri düzey arama fonksiyonları için harikadır
filter = filter.Where(b => b.IsBroken); // no query run filter = filter.Where(b => b.IsBroken); // sorgu henüz çalışmadı
var query = filter var query = filter
.OrderBy(b => b.Wheels) .OrderBy(b => b.Wheels)
.ThenBy(b => b.Name) .ThenBy(b => b.Name)
.Select(b => b.Name); // still no query run .Select(b => b.Name); // hala sorgu çalışmadı
// Now the query runs, but opens a reader, so only populates are you iterate through // Şimdi sorgu çalışıyor, reader'ı açar ama sadece sizin sorgunuza uyanlar foreach döngüsüne girer.
foreach (string bike in query) foreach (string bike in query)
Console.WriteLine(result); Console.WriteLine(result);
@ -529,98 +525,98 @@ on a new line! ""Wow!"", the masses cried";
} }
} // End LearnCSharp class } // LearnCSharp sınıfının sonu
// You can include other classes in a .cs file // Bir .cs dosyasına diğer sınıflarıda dahil edebilirsiniz
public static class Extensions public static class Extensions
{ {
// EXTENSION FUNCTIONS // UZANTI FONKSİYONLARI
public static void Print(this object obj) public static void Print(this object obj)
{ {
Console.WriteLine(obj.ToString()); Console.WriteLine(obj.ToString());
} }
} }
// Class Declaration Syntax: // Sınıf Tanımlama Sözdizimi:
// <public/private/protected/internal> class <class name>{ // <public/private/protected/internal> class <sınıf ismi>{
// //data fields, constructors, functions all inside. // //veri alanları, kurucular , fonksiyonlar hepsi içindedir.
// //functions are called as methods in Java. // //Fonksiyonlar Java'daki gibi metod olarak çağırılır.
// } // }
public class Bicycle public class Bicycle
{ {
// Bicycle's Fields/Variables // Bicycle'ın Alanları/Değişkenleri
public int Cadence // Public: Can be accessed from anywhere public int Cadence // Public: herhangi bir yerden erişilebilir
{ {
get // get - define a method to retrieve the property get // get - değeri almak için tanımlanan metod
{ {
return _cadence; return _cadence;
} }
set // set - define a method to set a proprety set // set - değer atamak için tanımlanan metod
{ {
_cadence = value; // Value is the value passed in to the setter _cadence = value; // Değer setter'a gönderilen value değeridir
} }
} }
private int _cadence; private int _cadence;
protected virtual int Gear // Protected: Accessible from the class and subclasses protected virtual int Gear // Protected: Sınıf ve alt sınıflar tarafından erişilebilir
{ {
get; // creates an auto property so you don't need a member field get; // bir üye alanına ihtiyacınız yok, bu otomatik olarak bir değer oluşturacaktır
set; set;
} }
internal int Wheels // Internal: Accessible from within the assembly internal int Wheels // Internal: Assembly tarafından erişilebilir
{ {
get; get;
private set; // You can set modifiers on the get/set methods private set; // Nitelik belirleyicileri get/set metodlarında atayabilirsiniz
} }
int _speed; // Everything is private by default: Only accessible from within this class. int _speed; // Her şey varsayılan olarak private'dır : Sadece sınıf içinden erişilebilir.
// can also use keyword private // İsterseniz yinede private kelimesini kullanabilirsiniz.
public string Name { get; set; } public string Name { get; set; }
// Enum is a value type that consists of a set of named constants // Enum sabitler kümesinden oluşan bir değer tipidir.
// It is really just mapping a name to a value (an int, unless specified otherwise). // Gerçekten sadece bir isim ile bir değeri tutmak için kullanılır. (aksi belirtilmedikçe bir int'dir).
// The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong. // İzin verilen enum tipleri şunlardır byte, sbyte, short, ushort, int, uint, long, veya ulong.
// An enum can't contain the same value twice. // Bir enum aynı değeri birden fazla sayıda barındıramaz.
public enum BikeBrand public enum BikeBrand
{ {
AIST, AIST,
BMC, BMC,
Electra = 42, //you can explicitly set a value to a name Electra = 42, // bir isme tam bir değer verebilirsiniz
Gitane // 43 Gitane // 43
} }
// We defined this type inside a Bicycle class, so it is a nested type // Bu tipi Bicycle sınıfı içinde tanımladığımız için bu bir bağımlı tipdir.
// Code outside of this class should reference this type as Bicycle.Brand // Bu sınıf dışında kullanmak için tipi Bicycle.Brand olarak kullanmamız gerekir
public BikeBrand Brand; // After declaring an enum type, we can declare the field of this type public BikeBrand Brand; // Enum tipini tanımladıktan sonra alan tipini tanımlayabiliriz
// Static members belong to the type itself rather then specific object. // Static üyeler belirli bir obje yerine kendi tipine aittir
// You can access them without a reference to any object: // Onlara bir obje referans göstermeden erişebilirsiniz:
// Console.WriteLine("Bicycles created: " + Bicycle.bicyclesCreated); // Console.WriteLine("Bicycles created: " + Bicycle.bicyclesCreated);
static public int BicyclesCreated = 0; static public int BicyclesCreated = 0;
// readonly values are set at run time // readonly değerleri çalışma zamanında atanır
// they can only be assigned upon declaration or in a constructor // onlara sadece tanımlama yapılarak ya da kurucular içinden atama yapılabilir
readonly bool _hasCardsInSpokes = false; // read-only private readonly bool _hasCardsInSpokes = false; // read-only private
// Constructors are a way of creating classes // Kurucular sınıf oluşturmanın bir yoludur
// This is a default constructor // Bu bir varsayılan kurucudur.
public Bicycle() public Bicycle()
{ {
this.Gear = 1; // you can access members of the object with the keyword this this.Gear = 1; // bu objenin üyelerine this anahtar kelimesi ile ulaşılır
Cadence = 50; // but you don't always need it Cadence = 50; // ama her zaman buna ihtiyaç duyulmaz
_speed = 5; _speed = 5;
Name = "Bontrager"; Name = "Bontrager";
Brand = BikeBrand.AIST; Brand = BikeBrand.AIST;
BicyclesCreated++; BicyclesCreated++;
} }
// This is a specified constructor (it contains arguments) // Bu belirlenmiş bir kurucudur. (argümanlar içerir)
public Bicycle(int startCadence, int startSpeed, int startGear, public Bicycle(int startCadence, int startSpeed, int startGear,
string name, bool hasCardsInSpokes, BikeBrand brand) string name, bool hasCardsInSpokes, BikeBrand brand)
: base() // calls base first : base() // önce base'i çağırın
{ {
Gear = startGear; Gear = startGear;
Cadence = startCadence; Cadence = startCadence;
@ -630,20 +626,20 @@ on a new line! ""Wow!"", the masses cried";
Brand = brand; Brand = brand;
} }
// Constructors can be chained // Kurucular zincirleme olabilir
public Bicycle(int startCadence, int startSpeed, BikeBrand brand) : public Bicycle(int startCadence, int startSpeed, BikeBrand brand) :
this(startCadence, startSpeed, 0, "big wheels", true, brand) this(startCadence, startSpeed, 0, "big wheels", true, brand)
{ {
} }
// Function Syntax: // Fonksiyon Sözdizimi:
// <public/private/protected> <return type> <function name>(<args>) // <public/private/protected> <dönüş tipi> <fonksiyon ismi>(<argümanlar>)
// classes can implement getters and setters for their fields // sınıflar getter ve setter'ları alanları için kendisi uygular
// or they can implement properties (this is the preferred way in C#) // veya kendisi özellikleri uygulayabilir (C# da tercih edilen yol budur)
// Method parameters can have default values. // Metod parametreleri varsayılan değerlere sahip olabilir.
// In this case, methods can be called with these parameters omitted // Bu durumda, metodlar bu parametreler olmadan çağırılabilir.
public void SpeedUp(int increment = 1) public void SpeedUp(int increment = 1)
{ {
_speed += increment; _speed += increment;