C#

Components on Blazor 1024 557 mezo

Components on Blazor

Hi my fellow Padawans

Blazor is a frontend framework like Angular or React but mostly like React and it has components for create pages and reusable objects functionalities.

But how can we create a component and use it on the pages in our Blazor application?

First Read this Article and create your first Blazor application 🙂

Then on your Solution Explorer find Pages and right click on it and Add -> Razor Component

On Add New Item windows write your components name and create it

I decided to make something different and I created Todo.Razor file and I add these codes on the page

@page "/todo"
@using BlazorApp1.Data;

<h3>Todo</h3>

<ul>
    @foreach (var todo in todos)
    {
            <li>@todo.Title</li>
    }
</ul>

<input placeholder="Something todo" @bind="newTodo" />
<button @onclick="AddTodo">Add todo</button>

@code {
    private List<TodoItem> todos = new();
    private string? newTodo;

    private void AddTodo()
    {
        if (!string.IsNullOrWhiteSpace(newTodo))
        {
            todos.Add(new TodoItem { Title = newTodo });
            newTodo = string.Empty;
        }
    }
}

And find NavMenu.razor file inside of the Shared folder on your Solution Explorer. Find the last item of menu divs and Add this code:

  <div class="nav-item px-3">
            <NavLink class="nav-link" href="todo">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Todo
            </NavLink>
        </div>

You will have a NavMenu.Razor page like this:

<div class="top-row ps-3 navbar navbar-dark">
    <div class="container-fluid">
        <a class="navbar-brand" href="">BlazorApp1</a>
        <button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
</div>

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <nav class="flex-column">
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="todo">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Todo
            </NavLink>
        </div>
    </nav>
</div>

@code {
    private bool collapseNavMenu = true;

    private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;

    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }
}

When you open the webpage you will see the Todo on your left navigation menu and then you will see your amazing Todo application like below:

If you want to use this component in other pages for example add this component on the home page. Go to your Index.Razor inside of the Pages folder and add this code :

<Todo/>

Your index.Razor will look like this

@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, Everyone!</h1>

Welcome to your new app. Hello 

<SurveyPrompt Title="How is Blazor working for you?" />




<Todo/>

Then we RUN our app oooorrr we can Hot Reload and we will see the result like below:

That is easy isn’t it ?

I hope that is helpful

May the knowledge be with you

Create Your First Blazor Application 1024 557 mezo

Create Your First Blazor Application

Hello My Fellow Padawans 🙂

Today I will tell you about a new Frontend Technology called “Blazor”. It sounds similar from somewhere… Yes Razor and yes its a Microsoft technology.

Ok but lets remember what is RAZOR first: Razor is a format for generating text-based content, like HTML. Razor files have cshtml or a razor file extension, and contain a mix of C# code along with HTML.

What is Blazor

Blazor is a user-interface framework built on .NET and Razor. Blazor applications can run on a server as part of an ASP.NET application or can be deployed to run in the browser on a user’s machine similar to a single-page application. It comes with 2 different app styles.

Blazor Server: is an implementation of the Blazor user-interface framework as part of the ASP.NET Core web development framework, deployed to a web server. Developing an application with Blazor Server generates HTML on a web server as it is requested by web site visitors, typically using a web browser. That HTML is then delivered to the visitor’s browser, and a two-way communication pipeline is maintained using ASP.NET Core SignalR and preferring a Web Sockets connection.

Users that click buttons, navigate, and perform other interactions with a Blazor Server application have their actions transmitted on this SignalR connection, and the server responds with user-interface updates using the same connection. The Blazor Server framework automatically updates the browser with the content generated on the web server.

Blazor WebAssembly: Shortened to Blazor WASM, is an implementation of the Blazor user-interface framework that runs on the HTML 5 standard WebAssembly runtime present in all modern browsers. The binary output of your application, the DLL files, are transmitted to the browser and run with a version of .NET that has been optimized to work with the WebAssembly runtime regardless of the underlying operating system of the device browsing to the website.

Since WebAssembly is a technology that runs entirely in the browser, it’s possible to deploy this model of the Blazor application using files that a web server doesn’t parse or interact with. This type of “static” approach reduces the requirements for a web server and shifts all processing for the application to the user’s machine.

Advanced processing and logic can take place in the browser. When the application needs data or to interact with other services, it can use standard web technologies to communicate with HTTP services.

How to build an application with Blazor

Start your Visual Studio 2022

Then create Blazor Server App and in the Configure your new project window, enter BlazorApp as the project name and select Next.

In the Additional information window, select .NET 7.0 (Standard Term Support) in the Framework drop-down if not already selected and click the Create button.

Your project is created and loaded in Visual Studio. Take a look at the contents of your project using Solution Explorer.

Several files were created to give you a simple Blazor app that is ready to run.

  • Program.cs is the entry point for the app that starts the server and where you configure the app services and middleware.
  • App.razor is the root component of the app.
  • The Pages directory contains some example web pages for the app.
  • BlazorApp.csproj defines the app project and its dependencies and can be viewed by double-clicking the BlazorApp project node in the Solution Explorer.
  • The launchSettings.json file inside the Properties directory defines different profile settings for the local development environment. A port number is automatically assigned at project creation and saved on this file.

To run your application basically click the Run button.

When you made some changes and you want to see your changes on the browser you need to click the Hot Reload button

If you want to make “Hot Reload” every time you save your changes then you need to click the menu button next to “Hot Reload” and select “Hot Reload on File Save” Then VS will watch your file save and refresh your web app on the browser to show your changes.

After you run your app you will see the default app of the Blazor.

Congrats you made your first Blazor App and make it run!

Last thing I want to show is how Blazor files and pages look like

_Host.cshtml This holds our application and renders page components.

@page "/"
@namespace BlazorApp1.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
    Layout = "_Layout";
}

<component type="typeof(App)" render-mode="ServerPrerendered" />

Index.razor : This is the Home page that you see on the screenshot below.

@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, Everyone!</h1>

Welcome to your new app. Hello 

<SurveyPrompt Title="How is Blazor working for you?" />

Counter.razor and this is the counter component as a page. It’s easy to render and reuse.

@page "/counter"

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

Congrats 🙂 you open the new Blazor App and make that work

I will keep continuing to write about it coz I probably will use it for my company.

I hope that is helpful

May the knowledge be with you

C# ile Powerpoint Sunumu Hazırlamak 554 382 mezo

C# ile Powerpoint Sunumu Hazırlamak

Merhaba arkadaşlar
Uzun süreden beri bir makale yazmaya vakit bulamıyorum ama yavaş yavaş geri dönüyorum. Bu yazıda sizlere zevkli küçük bir örnek göstermek istiyorum. 😀 C# üzerinden program yardımı ile PowerPoint sunumu hazırlamanın nasıl olduğu ile ilgili başlangıçta çok işinize yarayacak bir kod parçası
Bunun için öncelikle bir windows Forms projesi açalım ve 1 tane Buton ekleyelim 🙂 Projemiz içersine Referans olarak 2 önemli kütüphane eklememiz gerekiyor. Sağa tıklayıp “Add Reference” dedikten sonra “COM” sekmesi içersinde bulunan microsoft graph 15.0 object library ve microsoft PowerPoint 15.0 object library kütüphanelerini seçip ekleyelim.
Artık gerisi çok kolay 🙂 işte bundan sonra işi yapacak olan kod parçası

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

namespace testToCreatePttFileFromImages
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string pictureFileName = “C:\\picToVideo\\2.jpg”;

Microsoft.Office.Interop.PowerPoint.Application pptApplication = new Microsoft.Office.Interop.PowerPoint.Application();

Microsoft.Office.Interop.PowerPoint.Slides slides;
Microsoft.Office.Interop.PowerPoint._Slide slide;
Microsoft.Office.Interop.PowerPoint.TextRange objText;

// Create the Presentation File
Presentation pptPresentation = pptApplication.Presentations.Add(MsoTriState.msoTrue);

Microsoft.Office.Interop.PowerPoint.CustomLayout customLayout = pptPresentation.SlideMaster.CustomLayouts[Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText];

// Create new Slide
slides = pptPresentation.Slides;
slide = slides.AddSlide(1, customLayout);

// Add title
objText = slide.Shapes[1].TextFrame.TextRange;
objText.Text = “The Header Of The Presentation”;
objText.Font.Name = “Arial”;
objText.Font.Size = 32;

//objText = slide.Shapes[2].TextFrame.TextRange;
//objText.Text = “this text come after the heading with bullet”;

Microsoft.Office.Interop.PowerPoint.Shape shape = slide.Shapes[2];
slide.Shapes.AddPicture(pictureFileName, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, shape.Left, shape.Top, shape.Width, shape.Height);

//slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = “the text is for the notes to specific page”;

pptPresentation.SaveAs(@”c:\picToVideo\fppt.pptx”, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);
pptPresentation.Close();
pptApplication.Quit();

}
}
}

String Char Dizisidir! 920 300 mezo

String Char Dizisidir!

Merhaba arkadaşlar
Çalıştığım şirkette bulunmuş olduğum proje için Senior yani 2 3 yıl deneyimi olan developer arkadaşlar arıyoruz ve bunun ile ilgili müdürüm mülakat görüşmelerine benimde girmemi rica etti bende seve seve kabul ettim. Mülakatta gelen arkadaşlara neler yaptığını sorduğumuzda herkes güzel güzel anlatıyor yaptıklarını iş görüşmesinde göze girmek için hepimizin yaptığı gibi herşeyi anlatıyor anlatmaya gayret ediyor. Ancak

Dikkatimi çeken bir konu var ki işte oda bu yazıyı sizlerle paylaşmak isteyişimin asıl sebebi : Senior olarak alınacak ve daha önce bir çok projede görev almış olan arkadaşlar çok çok çok basit bir sorudan elendiklerinin veya olumsuz bir not aldıklarının farkında değiller. String bir değişken içindeki karakterlerin sayılması ve işlem yapılması ile ilgili bir sorumuz var ve burada herkese hiçbir string metot vs kullanmayın diye de uyarıyoruz tahmin ettiğiniz gibi basit küçük bir algoritma sorusu.
Ne var bunda diyebilirsiniz işte konu bu zaten 🙂 arkadaşların hiç biri string bir char dizisidir deyip bu şekilde foreach ile veya for ile kodunu kağıda dökmeye başlamadı. Herkes bir ipucu verilmesini bekliyor yada farklı yollarla bir array e çevirme işine giriyor.Halbuki ismini yazarken bile aslında bir karakter dizisi kullandığının farkında bile değil.
Küçük ayrıntılar veya bilgiler hayat kurtarır yada iyi yerlere getirebilir.

Unutmayın  String bir Char dizisidir.

Umarım Yararlı Olur ve bunu okuyan arkadaşlar mülakatlarda başvurdukları güzel iş yerlerine sevdikleri işleri yapmak üzere girebilirler.

Bilgiyle kalın

M.Zeki Osmancık

SOLID OOP Prensipleri 511 409 mezo

SOLID OOP Prensipleri

Merhaba arkadaşlar
Bu yazımda sizlerle OOP yazarken dikkat etmemiz gereken OOP yi gerçek anlamıyla programlarımıza veya web sitelerimize uygulama aşamasında nelere dikkat etmeliyiz bu konyu işleyen SOLID OOP Prensipleri ile ilgili küçük bir bilgilendirme yapacağım
OOP yi herkes bilir az çok anlatır veya basit yöntemlerle uygular yada uyguladığını sanar. Halbuki OOP programlama yaparken bir takım prensipler uygulanmalıdır. Bu prensiplerin baş harflerinden oluşan bir keyword var elimizde. SOLID
Solid 5 ayrı prensibin birleşmiş halidir ve OOP yaparken uygulamamız gereken kurallardan bahsederler. Hadi bakalım bu akrostiş şiir tadındaki prensipler neymiş görelim:
1- Single Responsibility Principle
2- Open/Closed Principle
3- Liskov’s Substitution Principle
4- Interface Sergregation Principle
5- Dependency Inversion Principle
İlk madde ile başlayalım küçük açıklamalar yapmaya.
1. Single Responsibility Principle : Bu prensibe göre bir metot, sınıf,nesne vb. yapıların yanlızca bir tane görevi olur. Bir metot, sınıf,nesne vb. değiştirmek için yanlızca bir sebebimiz olmalıdır. Birden fazla nedenimiz varsa bir yanlışlık var ve bu prensibe uymuyoruz anlamına gelir. Amaç her metot, sınıf,nesne vb. yapıya tek bir görev tek bir sorumluluk yüklemektir.
2. Open/Closed Principle : Yazmış olduğunuz metot, sınıf,nesne vb. yapılar geliştirmeye açık ancak değiştirmeye kapalı olmalıdır. Bu ne demektir peki: yazmış olduğunuz kod asla değiştirilmemelidir yanlızca üzerine eklemeler yapılmalıdır. Kodlarımızı yazarken bu şekilde dizayn etmeliyiz.
3. Liskov’s Substutions Principle : Bu prensibe göre alt sınıflardan elde ettiğiniz bir nesne ile üst sınıftan elde edilen nesne yer değiştirirse bu değişim kesinlikle ve kesinlikle aynı davranışa sahip olmalıdır. Yani örnekleyecek olursak OOP anlatırken hep bahsettiğimiz bir örnek olan CANLI sınıfımız olsun ve bu CANLI adındaki sınıfımız INSAN ve HAVYAN adlı iki sınıfa kalıtım vermiş olsun. Bu prensipte anlatılmaya çalışılan şey eğer ben bir işlemde CANLI sınıfını kullanıyorsam ve işlemlerim başarılı oluyorsa INSAN veya HAYVAN sınıfından aldığım örnekler ilede aynı işlemleri başarılı olarak gerçekleştirebilmeliyim içersinde bunu engelleyecek başka metot, sınıf,nesne vb. yapılar bulunmamalı demek istiyor.
4. Interface Sergregation Principle : Prensip olarak aynı özelliklere sahip olan sınıfları tek bir interface de toplamak sonradan o sınıfların hepsinde kesin olarak kullanılmayacak olan başka metot, sınıf,nesne vb. yapıları bu interface içersine eklemek doğru değildir. Ilk başta belki bir çözüm olabilir ama prensip olarak yanlıştır. Çözüm ise interface ‘leri parçalamaktır. Kesin olarak kullanılacak olan ortak metot, sınıf,nesne vb. yapıları ayrı ayrı interface ler içersinde toplayarak sınıflara implement etmektir.
5. Dependency Inversion Principle : Somut sınıflara olan bağımlılığı soyut sınıflar veya interface ler ile ortadan kaldırmaktır. Yani bir servis sınıfımız var ve bu servis sınıfı DB işlemleri ile ilgili işlemler gerçekleştiriyor. Başka bir A sınıfı üzerinden bu Servis sınıfına bağ kurup işlemlerimizi gerçekleştirirken ürettiğimiz A sınıfımız içersinde servis sınıfının bir çok örneği alınacak ve bir çok yerde kullanılabilecek ve kodlarımızı değiştirirken bağlı olan kısımlarda değişecek yada servis sınıfında yapılan bir değişiklik bizim servisi kullanan A sınıfımızdada değişikliklere sebep olacak . Amaç bu bağımlılığı ortadan kaldırmak ve daha güzel bir kod ortamı sağlamak.
Bu prensiplerde kod yazmak zorunlu olarak yapmanız gereken bir şey değil ama bu şekilde yazmanın tek bir amacı var daha az hata daha güzel kodlar 😀
Bilgiyle Kalın
M.Zeki Osmancık

Design Patterns (Tasarım Deseni) Nedir ? 1024 777 mezo

Design Patterns (Tasarım Deseni) Nedir ?

Merhaba arkadaşlar
Konumuz Design Pattern 🙂 Biliyorum bir çok kişi bu konu hakkında birşeyler yazmıştır ancak birde ben yazayım dedim. Benim blogumda neden design pattern yok ben neden yazmıyorum dedim 🙂 ve işte Design Pattern…
Design Pattern genel olarak yazılım tasarımı sürecinde sürekli karşılaşılan problemlere çözümler üreten hazır kalıplardır. İstenilen herhangi bir yere yerleştirildiğinde çalışan hazır tasarımlar değildirler. İşin aslı problemler için bulunan çözümlere yapılan açıklamalardır
OOP(Object Oriented Programming) prensipleri doğrultusunda oluşturulan sınıfların başka sınıflara bağımlılığının en aza indirgenmesi beklenir. Bu durum esnek bir yapıyı beraberinde getirir ve yazılımın kalitesi artar. İleride gerekecek geliştirmelere daha müsait bir yapı sağlamış olur. Bu yapı, yazılımcıya ve o yazılımcıdan sonra gelecek yazılımcıya zamandan ve iş gücünden ciddi manada tasarruf sağlar.
Tasarım şablonları aşağıda yer alan ortak özelliklere sahiptir:

  • Edinilen tecrübeler sonunda ortaya çıkmışlardır.
  • Amerikanın tekrar tekrar keşfedilmesini engeller 😀 .
  • Tekrar kullanılabilir kalıplardır.
  • Ortak kullanılarak daha büyük problemlerin çözülmesine katkı sağlarlar.
  • Devamlı geliştirilerek, genel bir çözüm olmaları için çaba sarfedilir.

Tasarım şablonları değişik kategorilere ayrılır. Bunlar:

  • Oluşturucu tasarım şablonları (creational patterns)
  • Yapısal tasarım şablonları (structual patterns)
  • Davranışsal tasarım şablonlar (behavioral patterns)

Oluşturucular

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

Yapısal

  • Adapter
  • Bridge
  • Facade
  • Decorator
  • Composite
  • Flyweight
  • Proxy

Davranışsal

  • Command
  • Memento
  • Strategy
  • Iterator
  • State
  • Chain Of Responsibility
  • Mediator
  • Observer
  • Template Method
  • Visitor

Bu desenlerin yanlızca çok çok basit açıklaması. Yukarda saydığım desenleri tek tek açıklamayı planlıyorum 🙂 Zaman buldukça yazıyor olacağım. Sizlerde beni bekliyor olun 😀
Bilgiyle Kalın 😉
M.Zeki Osmancık

C# Dynamic Nesnesi 350 106 mezo

C# Dynamic Nesnesi

Merhaba arkadaşlar
Bu yazımda C# daki yeni bir keyword’ den bahsetmek istiyorum DYNAMIC.
Dynamic keyword u C# 4.0 ile birlikte 2010 da gelen bir keyword. Bu keyword Dynamic Language Runtime (DLR) yi yönetir DLR dediğimiz olay tıpkı CLR (Common Language Runtime) gibi çalışan bir yapıdır. Dynamic bir nesne Dynamic tipindeki classların yönetiminin nasıl yönetileceğini belirler. Tıpkı CLR de olduğu gibi tamamen runtime da derlenir ve çalışırlar.

Diyelim ki iki farklı class oluşturmak istiyoruz ancak içersinde aynı isimden 2 metot olacak daha sonra söz konusu Dynamic sınıfdan bir instance alıyorsunuz. Dynamic nesne ile aynı isimdeki ancak farklı classlar içersindeki metotları çağırabiliyorsunuz.

Bir de örneğe göz atalım 😀

Örnek

Çıktı da Şöyle oluyor şekil örnek 1 A 😀

output

DataTable ‘dan List e Dönüştürme 342 204 mezo

DataTable ‘dan List e Dönüştürme

Merhaba arkadaşlar

Bu yazıda sizlere DataTable ile gelen veriyi List<T> olarak geri döndürmek istersek bu dönüştürmeyi LambdaExpressions /LINQ ile nasıl yapabiliriz ondan bahsetmek istiyorum.

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

HttpCookie Nedir ? 279 180 mezo

HttpCookie Nedir ?

Merhaba arkadaşlar
HttpCookie yapısından önce çok temel bilgi olarak Cookie nedir ondan bahsedelim 🙂
Cookie Nedir?
Bir web sayfası sunucusunun sizin bilgisayarınızın hard diskine yerleştirdiği ufak bir text dosyasıdır. Yani, o web sitesinin bir sonraki ziyarette sizi tanıması için geçerli bir bilgidir. Bu text dosyası bir komut dosyası olmadığı gibi, virüs de değildir. Size özel bir tanımlamadır ve sadece bu kodu tanımlayan web sunucusu tarafından okunabilir.Cookie’nin amacı; sizin o siteyi yeniden ziyaret ettiğinizi web sunucuya bildirmekten ibarettir.

HttpCookie Nedir?
Asp.Net ile yaptığımız sitelerimizde Cookie oluşturmak için kullandığımız bir class tır. Cookie nin yönetimini HttpRequest ve HttpResponse class ile gerçekleştirilir.
HttpCookie yi oluşturmak için

HttpCookie MyCookie = new HttpCookie("Cerezim");

Instance alındıktan sonra içersindeki property leride şu şekilde kısaca açıklayabiliriz.
Domain: Cookie nin etki alanını ayarlamak için kullanılır.
Expires: Cookie nin geçerlilik süresini ayarlamak için kullanılır DateTime tipinde değer alır.
HasKeys: Cookie içersinde alt anahtarlar olup olmadığını kontrol etmek için kullanılır.
HttpOnly: Cookie ye client tarafından javascript kodları tarafından ulaşılabilir olmasını sağlayan bir property dir.
Item: HttpCookie.Values özelliği için bir kısayoldur. Bu özellik Active Server Pages (ASP) nin önceki sürümleriyle uyumluluk sağlamak için kullanılır.
Name: Cookie ye bir isim verir veya cookie ismini okuyabilidiğimiz property.
Path: Cookie nin sanal adresini atayıp okuyabildiğimiz property
Secure:SSL uzerinden kullanilacak olan cookie ler ile ilgili guvenlik degerlerinin atandigi property dir.HTTPS uzerinden kullanilabilir
Value:Cookie içersine yerleştirilecek olan değeri atamak için kullanılır.
Values: Cookie içersine birden fazla değer atayabilmek için kullanılır.

Cookie tanımlayabilmek için HttpCookie sınıfından bir örnek alıp şu şekilde kullanabiliriz.

HttpCookie MyCookie = new HttpCookie("Cerezim");
MyCookie = Request.Cookies.Get("Cerezim");
if(MyCookie!=null)
{
Response.Write(MyCookie.Value);
}

Simdilik bu kadar daha sonraki yazilarda ayrintili sekilde nasil cookie tanimlayip kullanabiliriz ornek proje ile destekleyip gosterecegim.
Umarim yararli olur
Bilgiyle Kalin
M.Zeki OSMANCIK

C# ve PHP 3DESCrypto 691 618 mezo

C# ve PHP 3DESCrypto

Merhaba arkadaşlar
Bu kez sizlere şifreleme yöntemi olan 3DES(Triple Data Encryption Algorithm diye geçer ancak DES kısaltması Data Encryption Standard dan gelmektedir.) şifreleme yönteminin kodlarını vermek istiyorum belki bu yazıya daha sonra ayrıntılı şekilde bunun ne olduğu ile ilgilide birşeyler ekleyebilirim. 🙂 PHP ve C# için kodları aşağıda sizlerle paylaşıyorum
PHP

function encrypt($string) {
//Key
$key = "xxxxxxxx";

//Encryption
$cipher_alg = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);

$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return base64_encode($encrypted_string);
return $encrypted_string;
}

function decrypt($string) {
$string = base64_decode($string);

//key
$key = "xxxxxxxx";

$cipher_alg = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);

$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return trim($decrypted_string);
}

C# encryption:

using System;
using System.Security.Cryptography;
using System.Text;

public class Crypto3DES
{
public Crypto3DES()
{

}

private System.Text.Encoding encoding;

public string Key
{
get
{
return "xxxxxxxx";
}
}

public System.Text.Encoding Encoding
{
get
{
if( encoding == null )
{
encoding = System.Text.Encoding.UTF8;
}
return encoding;
}

set
{
encoding = value;
}
}

public string Encrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

DES.Key = Encoding.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;

ICryptoTransform DESEncrypt = DES.CreateEncryptor();

byte[] Buffer = encoding.GetBytes(strString);

return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}

public string Decrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();

DES.Key = Encoding.UTF8.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESDecrypt = DES.CreateDecryptor();

byte[] Buffer = Convert.FromBase64String(strString);
return UTF8Encoding.UTF8.GetString( DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length) );
}
}

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

PHP’ de WCF Servis Çalıştırmak 800 421 mezo

PHP’ de WCF Servis Çalıştırmak

Merhaba arkadaşlar

WCF Servisi yazdık yayınladık. C# tarafında nasıl kullanmamız gerektiği zaten basit olarak servisin üzerindeki örnek kısmında yazıyor. Bu yazıda .Net de yazdığımız bir metodun farklı bir platform olan PHP tarafında nasıl kullanacağımızı kısaca göstermek istiyorum.  Öncelikle kodlara geçmeden önce belirtmeliyim ki server üzerinde SOAPCLIENT kurulu olmalı eğer kurulu olmazsa WCF servisi kullanamazsınız.

WCF Servis tarafında aşağıdaki gibi bir metot yazdım

    public string AddAccount(string yetkiliAd,string yetkiliSoyad,string firmaAdi,string firmaAdresi){

return string.Format(“You entered: {0}”, yetkiliAd+yetkiliSoyad+firmaAdi+firmaAdresi);

}

Şimdi gelelim PHP kodlarına basit olarak kodlar şöyle:

// SOAP client WCF servis e bağlanmamızı sağlayan bir class ve WCF servis üzerindeki metotların çalıştırılmasını sağlar.
$wsdl = ‘http://servisadresi/ServisKlasoru/Service.svc?wsdl’;
$soapClient = new SoapClient($wsdl, array(‘cache_wsdl’ => 0));// Yazılan WCF servis üzerinde AddAccount adında bir metot var ve onun içersine parametreleri gönderiyoruz.
$AccountParameter = new stdClass();
$AccountParameter->yetkiliAd = addslashes($this->ucwords_tr($_POST[Ad]));
$AccountParameter->yetkiliSoyad = addslashes($this->ucwords_tr($_POST[Soyad]));
$AccountParameter->firmaAdi = addslashes($this->ucwords_tr($_POST[FirmaUnvan]));
$AccountParameter->firmaAdres = addslashes($this->ucwords_tr($_POST[FirmaAdres]));
try
{
// ve WCF servis üzerindeki AddAccount metodunu çalıştırım sonucu bir değişkene aktarıyor.
$result = $soapClient->AddAccount($AccountParameter);
}
catch (SoapFault $fault)
{
//echo “Fault code: {$fault->faultcode}” . NEWLINE;
//echo “Fault string: {$fault->faultstring}” . NEWLINE;
if ($soapClient != null)
{
$soapClient = null;
}
exit();
}
$soapClient = null;

//echo ”

\n”;

//print_r($result);

//echo ”

\n”;

//echo “Return value: {$result->AddAccountResult}” . NEWLINE;

Umarım yararlı olmuştur 😉

Bilgiyle Kalın

M.Zeki Osmancık

WCF Service IIS Ayarları 1024 575 mezo

WCF Service IIS Ayarları

Merhaba arkadaşlar

Bir önceki yazıda WCF servisin ne olduğu ile alakalı bilgi vermiştim şimdi ise yazdığımız bir servisin IIS üzerinde nasıl yayınlanacağı üzerinde duralım. Öncelikle yayın yapacağımız server üzerinde IIS yüklü olması gerekmekte. IIS üzerinden bazı ayarlar yapacağız ve dosyalarımızı yerleştirip yayına başlayacağız.

Dosyalar demişken WCF Service projesini yazıp tamamladıktan sonra projeyi Publish etmemiz gerekiyor. Publish işlemi servisi yayına hazırlamak anlamına geliyor ve yapmasıda çok basit sadece projeniz üzerinde sağ click sonra publish seçmeniz yeterli.

Şimdi server üzerinde IIS Yöneticisini açıyoruz.

1

 

Daha sonra kullanacağımız Framework versiyonunda bir Application Pool ekliyoruz

2

 

Bizim servisimiz .Net Framework 4.0 kullandığı için uygulama havuzumuz Framework 4.0 seçip oluşturuyoruz.

3

Bu uygulama havuzu içersinede bir web sitesi ekliyoruz ki yayınlayacağımız servisimizi içersine yerleştirebilelim 🙂
4

 

Bu websitesinin yayınlanacağı fiziksel adresi seçmemiz gerekiyor.

5

6

 

 

7

 

Web sitesini ekledikten sonra ve fiziksel yolunu belirttikten sonra eklediğimiz web sitesine bir Application (uygulama) ekliyoruz.

8

 

Uygulamamız içinde aynı şekilde bir fiziksel yol seçtikten sonra yayına hazırız.

9

 

Artık servisimiz yayına hazır tek yapmamız gereken server in adresini yazmak ve belirttiğimiz servisin klasör adı ve dosya adını yazıp servisimizi görüntülemek 😉

http://serveradres veya ip adresi/ServisKlasoru/Service.svc

Untitled picture

 

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

WCF Service Nedir? 448 274 mezo

WCF Service Nedir?

Merhaba arkadaşlar

WCF Service nedir konusu üzerinde bir kaç basit açıklama yapmak istiyorum. Bilindiği gibi microsoft bugüne kadar dağıtık uygulamalarının (Distrubuted Applications) geliştirilebilmesi için  .Net Remoting, XML Web Servisleri, MSMQ,COM+ gibi sistemleri geliştirmiştir.  WCF Service de temel olarak bu sistemlerin hepsinin yeteneklerine sahip ve tam SOA (Service Oriented Architecture – Servis Yönelimli Mimari) desteü, sağlayan güçlü bir Framework API si olarak açıklanabilir.

WCF iki önemli özellik ile birlikte karşımıza çıkmakta: bunlardan birincisi Microsoft tarafındaki servislerin farklı platformlar tarafından ele alınabilmesidir (Interoperability) . Böylece karmaşık .Net tiplerini özel olarak Java ,Com gibi modelleri destekleyen platformlara dağıtabiliriz. Bu yüzdende Linuz ,Unix gibi sistemler servislerimizin birer tüketicisi olabilirler.

İkinci özellik ise Windows kısmında yapılan dağıtık modeller arasında var olacak olan entegrasyonlarının tek bir çatı altında toplanabilmesidir. Bu özellik dışında WCF Service  , CLR tiplerini birer servis olarak sunabilmemizi ve servisleri birer CLR tipi olarak kullanabilmemizi sağlayan bir mimari sunmaktadır.

WCF Service ‘e aynı makine içinde aynı process te yer alan farklı bir Application Domain üzerinden ,aynı makinede yer alan farklı bir process içindeki farklı Application Domain üzerinden , farklı bir makinedeki process içinde yer alan Application Domain üzerinden ulaşabiliriz. Client’ lar hangi Application Domain üzerinde olursa olsunlar servis ile olan iletişimlerini proxy nesnesi üzerinden sağlamak zorundadırlar.

İngilizce kaynaklarda WCF Service ‘in ABC sinden sıkça bahsedilmektedir. Bu ABC nedir alfabemi diye sorarsanız değil 😀 ABC Addresses Bindings Contracts anlamına gelen ve WCF in çekirdeğinde yer alan önemli kavramlardır.

Addresses : Bulunan her servis benzersiz bir adrese sahip olmalıdır Özellikle bir servis adresi servisin teri taşıma protokolü bilgilerinden oluşmalıdır. Servis yeri derken kastetmeye çalıştığım şeyler aslında : Bilgisayar adı, site adı i network , iletişim portu, pipe queue, URI adları ve kesin bir path adresi   olarak sıralanabilir. Burada kullanılan taşıma protokolleri ise HTTP , TCP, P2P , IPC , MSMQ olarak soralanabilir.

Contracts : Bir servisin ne iş yaptığını bilmek önemlidir. Özellikle client’ ların ihtiyaç duyduğu proxy sınıflarının yazılmasında önemli bir konudur. Bu sebeple WCF Service üzerinde tüm servisler dış ortama bir Contract sunmaktadır. Genel manada 4 tane contract tipi vardır. bunlar

Service Contract : Serviste hangi operasyonların var olduğu ile alakalı sözleşmedir.

Data Contract :Servislerden client ‘lara giden ve client ‘ lardan servise gelen veri tiplerini tanımlayan sözleşmedir. Int String gibi bilinen tipler için bu sözleşmeler Implicit yani bilinçsiz olarak hazırlanır. Ancak karmaşık tiplerde ve kendi oluşturduğumuz tiplerde Explicit olarak tanımlanmaları gerekir. Bu sayede Java vb platformlara kendi tanımladığımız sınıfı o platformların anlayacağı şekilde sunmuş oluyoruz.

 Fault Contract : Servis tarafından hangi hataların fırlatılabileceğini ve bu servisi kullanan client a bu hataların nasıl aktarılacağını tanımlayan sözleşmedir.

Message Contract : Servislerin mesajları ile iletişimini sağlayan sözleşmedir.

Bindings :Bindings temek olarak servisleri ile nasıl iletişim kurulacağını tanımlamak için kullanılırlar. Bir bindings tip  transport type , protocok ve data encoding bilgilerini bildirir. Bu bilgiler aslında servis yönelimli mimari modelde kullanılabilecek olan senaryolar düşünülerek oluşturulurlar bu yüzdende WCF bu önceden bilinen senaryoları kullanabilmek için gerekli bağlayıcı tipleri önceden bildirmiştir bunlar :

 

Binding Tipi KonfigurasyonElementi Taşıma Çeşidi(Transport Type) Veri Çözümlemesi(Data Encoding) PlatformDesteği

(Interoperability)

BasicHttpBinding <basicHttpBinding> HTTP / HTTPS Text Var
NetTcpBinding <netTcpBinding> TCP Binary Yok
NetPeerTcpBinding <netPeerTcpBinding> P2P Binary Yok
NetNamedPipeBinding <netNamedPipeBinding> IPC Binary Yok
WSHttpBinding <wsHttpBinding> HTTP/HTTPS Text/MTOM Var
WSFederationBinding <wsFederationHttpBinding> HTTP/HTTPS Text/MTOM Var
NetMsmqBinding <netMsmqBinding> MSMQ Binary Yok
MsmqIntegrationBinding <msmqIntegrationBinding> MSMQ Binary Var
WSDualHttpBinding <wsDualHttpBinding> HTTP Text/MTOM Var

Buradaki tiplerden hangisini seçeceğimiz, geliştireceğimiz SOA (Service Oriented Architecture) modelindeki ihtiyaçlarımız doğrultusunda belirlenebilirler.

Şimdi isterseniz bir WCF Service projesi açarak inceleyelim.

WCF Service projesi açtığımızda bizi karşılayan önemli 3 dosya vardır bunlar IService.cs ,Service.cs ,web.config dosyalarıdır bu dosyalarda neler var bir bakalım.

IService.cs

Bu interface servis içersinde kullanılacak olan metotları property leri ve bunların contractlarının belirtildiği dosyadır 😉

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the interface name “IService1” in both code and config file together.

[ServiceContract]

public interface IService1

{

[OperationContract]

string GetData(int value);

[OperationContract]

CompositeType GetDataUsingDataContract(CompositeType composite);

// TODO: Add your service operations here

}

// Use a data contract as illustrated in the sample below to add composite types to service operations.

[DataContract]

public class CompositeType

{

bool boolValue = true;

string stringValue = “Hello “;

[DataMember]

public bool BoolValue

{

get { return boolValue; }

set { boolValue = value; }

}

[DataMember]

public string StringValue

{

get { return stringValue; }

set { stringValue = value; }

}

}

}

 

 

Service.cs

Service.cs ise işlemlerimizin IService.cs dosyasındaki gibi tanımlanmış olan metotlar içersine yazacağımız dosyamızdır.

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the class name “Service1” in code, svc and config file together.

// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.

public class Service1 : IService1

{

public string GetData(int value)

{

return string.Format(“You entered: {0}”, value);

}

public CompositeType GetDataUsingDataContract(CompositeType composite)

{

if (composite == null)

{

throw new ArgumentNullException(“composite”);

}

if (composite.BoolValue)

{

composite.StringValue += “Suffix”;

}

return composite;

}

}

}

 

Web.config

<?xml version=”1.0″?><configuration>

<system.web>

<compilation debug=”true” targetFramework=”4.0″ />

</system.web>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<!– To avoid disclosing metadata information, set the value below to false before deployment –>

<serviceMetadata httpGetEnabled=”true”/>

<!– To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information –>

<serviceDebug includeExceptionDetailInFaults=”false”/>

</behavior>

</serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled=”true” />

</system.serviceModel>

<system.webServer>

<modules runAllManagedModulesForAllRequests=”true”/>

<!–

To browse web app root directory during debugging, set the value below to true.

Set to false before deployment to avoid disclosing web app folder information.

–>

<directoryBrowse enabled=”true”/>

</system.webServer>

</configuration>

 

Umarım yararlı olur.

Bilgiyle Kalın

M.Zeki Osmancık

 

Linq To SQL _ Insert Update Delete 570 571 mezo

Linq To SQL _ Insert Update Delete

Merhaba arkadaşlar

Bir önce ki makalede sizlere LinqToSql ile nasıl Select sorguları çalıştırabileceğiniz ile ilgili bazı bilgiler vermiştim. Bu sefer ise Insert Update ve Delete işlemleri ile ilgili bazı bilgiler vermek istiyorum. Projemiz içersine dbml dosyasını eklediğimizi varsayarak devam etmek istiyorum. Daha önceki örnekteki form tasarımına ek olarak sadece 3 Button 2 Textbox ve Label nesnelerini ekleyip bu tasarım üzerinden devam edeceğim.

Insert

Insert işlemini gerçekleştirebilmek için Kaydet butonumuzun Click olayı içersine sadece şu kodları yazmamız yeterli olacaktır.

NorthwindDataContext db = new NorthwindDataContext();
Category eklenecek = new Category();
eklenecek.CategoryName = TextBox1.Text;
eklenecek.Description = TextBox2.Text;
db.Categories.InsertOnSubmit(eklenecek);
db.SubmitChanges();
Doldur();

Bu işlemde bir dataContext örneği oluşturduktan sonra Northwind üzerine insert işlemi için gerekli olan alanları belirttiğimiz Category tipindeki nesneyi doldurup bu nesneyi tüm bilgileri ile birlikte kaydetmesini söylüyoruz.

Güncelleme ve silme işlemlerinden önce ufak bir noktaya değinmek sanırım yerinde olacaktır. SQL sorgularında yaptığımız gibi bizim burada mutlaka bir ID vermemiz gerekiyor yani güncellemek istediğimiz verinin kesin adresini yolunu belirtmeliyiz. Biliyorsunuz ki SQL kodları ile Update veya Delete komutları yazdığınızda “Where” ile ID sini belirtmezseniz tüm kayıtlar için güncelleme veya silme işlemini gerçekleştirir. Bu yüzden önce nasıl ID belirtiriz ona bakalım.  ID yazan yere 3 5 yazmayacağız tabi ki. DataGridView üzerinden bir veri seçip onu yerleştirdiğimiz Textbox ve Label lar üzerine yazdırdıktan sonra işlemlerimize devam edeceğiz.

Kayıt Seçme İşlemi

Bunun için DataGridView üzerine listelediğimiz kayıtlardan herhangi bir tanesine çift tıkladığımızda işin gerçekleşmesi için CellContentDoubleClick olayı işimizi görebilir ve içersine yazmamız gereken kodlar ise şunlar:

Bu adımdan sonra artık listelenen kayıtlar arasından birine çift tıkladığımızda tüm bilgileri text ve label nesnelerine yazılacak bizde güncelleme veya silme yaparken bu bilgilerden yararlanabiliriz.

NorthwindDataContext db = new NorthwindDataContext();
Category secilecek = db.Categories.FirstOrDefault(x => x.CategoryID == 
Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString()));
lblID.Text = secilecek.CategoryID;
txtName.Text = secilecek.CategoryName;
txtDesc.Text = secilecek.Description;

Update

Güncelle butonumuzun Click olayına ise şu kodları eklememiz yeterli :

NorthwindDataContext db = new NorthwindDataContext();
Category guncellenen = db.Categories.FirstOrDefault(x=>x.CategoryID ==Convert.ToInt32(lblID.Text));
guncellenen.CategoryName = txtName.Text;
guncellenen.Description = txtDesc.Text;
db.SubmitChanges();
Doldur();

Burada daha önce seçip bir label üzerine yazdırdığımız ID yi kullanarak TextBox lar üzerindeki güncel verileri alıp update işlemini gerçekleştiriyoruz.

Aynı şekilde delete işlemi içinde yazmamız gereken kodlar çok basit şöyle ki :

NorthwindDataContext db = new NorthwindDataContext();
Category silinen = db.Categories.FirstOrDefault(x => x.CategoryID == int.Parse(lblID.Text));
db.Categories.DeleteOnSubmit(silinen);
db.SubmitChanges();
Doldur();

Birde burada her işlemden sonra kullandığımız datagridview içersine bilgileri dolduran Doldur metodu var onuda sizlerle paylaşayım.

db = new NorthwindDataContext();
var sonuc = from x in db.Categories
select new
{
x.CategoryID,
x.CategoryName,
x.Description
};
dataGridView1.DataSource = sonuc;

Bu kodları butonlarımızın Click olaylarına yazdıktan sonra herhangi bir hataya karşı önlem almadığımız için işlem sıramız şöyle olmalı öncelikle form açılacak ve kayıtlarımız sıralanacak , ardından bir kayıt eklemek için textboxlar doldurularak Kaydet butonuna basılacak ve Doldur metodu ile kayıtlar yeniden datagridview üzerinde görüntülenecek ardından bir kayda çift tıklayarak bilgilerini text ve label üzerine yazdıracağız ve Güncelle butonu ile güncelleme ve Sil butonu ile seçilen kaydın silinme işlemlerini gerçekleştireceğiz.

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

 

LinqToSQL _ Select 992 608 mezo

LinqToSQL _ Select

Merhaba arkadaşlar bu yazımızda sizlere LinqToSQL nesnesini en basit şekilde nasıl kullanırız bunu göstermek istiyorum. Öncelikle LinqToSQL nesnesini kullanabilmek için ilk yapmamız gereken şey projemiz içersine bu nesneyi eklemektir.

Bu nesneyi eklediğimizde ve Server Explorer üzerinde ekliyeceğimiz bir veritabanı varsa buradan tabloları sürükleyip bıraktığımızda kendisi otomatik olarak bu tablolar ile alakalı bazı class ları oluşturur bize sadece kullanmak kalır 😉

Bu işlemi tamamladıktan sonra geldi sıra kod yazma işlemine acaba bu LinqToSQL den nasıl veri çekip form üzerindeki nesnelerde gösterebiliriz.

Select sorgusu nasıl yapılır ?

Select işlemini farklı şekillerde yapabilirsiniz bunun bir kaç farklı yolu mevcut. Hepsinde aynı sonucu alırız yani “SELECT * FROM CATEGORIES ” sorgusunun sonucunu alırız 😉

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categoriesselect x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();dataGridView1.DataSource =  db.GetTable<Category>();

Select sorgusuna Where kriteri ekleme işlemi ?

Select sorgusune Where kriterini eklemek için yani “SELECT * FROM CATEGORIES WHERE CATEGORYID = 1” sorgusunun LinqToSQL de yazılması işlemide şu şekillerde olabilir.

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryID ==1select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)select x;dataGridView1.DataSource = sonuc;

Gelen sorguyu listeleme işlemi yani Order By anahtar kelimesinin yaptığı işi nasıl yapacağız şimdi kısa bir kodla bunu görelim 😉

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)orderby x.CategoryID ascendingselect x;dataGridView1.DataSource = sonuc;

 

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryName.StartsWith(“B”)orderby x.CategoryID descendingselect x;dataGridView1.DataSource = sonuc;

 

Bu kodlar sadece select için kullanabileceğimiz basit kodlar. Bir sonraki yazıda Inner Join, Left, Right Join gibi yapıların nasıl kullanılabileceğine bakacağız.

Umarım Yararlı Olur

Bilgiyle Kalın.

M.Zeki Osmancık

Sınırsız Ağaç Yapısı ve Treeview Kullanımı 563 595 mezo

Sınırsız Ağaç Yapısı ve Treeview Kullanımı

Merhaba arkadaşlar

Bu yazımda çokça bahsedilen çokça kullanılacak olan bir kontrol yapısı ve bunun database den gelen verilerle nasıl çalıştığını göstermek isterim sizlere…

Bahsettiğimiz kontrolümüz Treeview denilen bir nesne bu nesne bizlere ağaç yapısı bulunan bilgileri rahatlıkla ve tek ekranda görmemizde bizlere kolaylık sağlayan bir kontrol peki ama nasıl bu kontrole birşeyler ekler kullanılabilir hale getirebiliriz…

Öncelikle bir DB ye ve tabloya ihtiyacım var sırası gelmişken birde SQL tablosunda sınırsız ağaç yapısından bahsetmeden olmaz heralde.  Şekildeki gibi bir veritabanı oluşturdum…

 

Buradaki mantık aslında basit eğer bir kayıt root kayıtsa yani kök kayıtsa o zaman AltKategoriID si NULL olmalıdır. Eğer girdiğimiz kategori başka bir kategori altında duruyorsa o halde hangi kategori üst ise AltKategoriID sine o kaydın ID değerini girmeliyiz. Zaten resimdeki birbirine bağlı yapıda bunu temsil eder. Birde girdiğimiz verileri inceleyin bakalım nasıl birşey varmış 😀

Burada Elektronik root yani ana kategori Bilgisayar onun altında bulunduğu için Bilgisayar kaydının AltKategoriID si Elektronik kaydının ID sine eşit Bilgisayarın altında olanlarda Bilgisayar kaydının ID sine sahip olacaktır böylelikle alt alta uzayıp giden sınırsız bir ağaç yapısına sahip olabiliriz.

Peki tablomuz tamam verilerimizide girdik e hani Treeview  derseniz onuda şöyle özetleyelim

Yeni bir Windows formuma Treeview ve button nesnemi yerleştirdim

Ardından button nesnesinin Click olayına gelerek dedim ki  :

DataRelation baglanti;private void btnListele_Click(object sender, EventArgs e){SqlConnection cnn = new SqlConnection(“Data Source = .; Initial Catalog = Deneme; User = sa; Password = 1234567?;”);SqlDataAdapter adp = new SqlDataAdapter(“Select * From Kategoriler”,cnn);DataSet ds = new DataSet();

adp.Fill(ds,”Kategoriler”);

 

baglanti = new DataRelation(“baglan”,ds.Tables[“Kategoriler”].Columns[“KategoriID”],

ds.Tables[“Kategoriler”].Columns[“AltKategoriID”]);

 

ds.Relations.Add(baglanti);

 

foreach (DataRow dr in ds.Tables[“Kategoriler”].Rows)

{

if (dr[“AltKategoriID”] == DBNull.Value)

{

TreeNode root = new TreeNode(dr[“KategoriAdi”].ToString());

root.Tag = dr[“KategoriID”];

tvAgac.Nodes.Add(root);

AltKategorileriGetir(dr,root);

}

}

tvAgac.ExpandAll();

}

 


Kodlara bakacak olursak klasik bir ADO.net ile verilerimi alıp bir DATASET e eklemişim biliyorsunuzki DATASET nesnesi içine birden

fazla DATATABLE nesnesi barındırabilen bir nesne yani sanal veritabanı gibide düşünebiliriz aslında. Peki database de bağlantılar olurda bunda olmazmı ? Olmamı tabikide olur bu bağlantıyıda DATARELATION nesnesi sağlar işte tam burada bende verilerimi çektikten sonra içindeki hangi veri ile hangi verinin eşleşeceği yani hangisinin ana ID hangisinin ona bağlı olan Altkategori olduğunu belirtip bağlantımı tamamladım. Ardından bir foreach ile Dataset içersine attığım Datatable içindeki satırları tek tek almaya başladım ve bu foreach içersinde sadece AltKategorisi NULL olanları aldım yani Root olan kök olan kayıtları aldım ve Treeview nesneme ekledim.

Peki bunun altında bişi yokmu ? Altındakini hatta onun altındaki kayıtları nasıl alacağız derseniz ondada bir metotun yardımını isteyip o metodu kendi içersinde çağırarak işimizi çözeceğiz…

 

private void AltKategorileriGetir(DataRow dr,TreeNode pNode){foreach(DataRow row in dr.GetChildRows(baglanti)){TreeNode childNode = new TreeNode(row[“KategoriAdi”].ToString());childNode.Tag = row[“KategoriID”];pNode.Nodes.Add(childNode);

AltKategorileriGetir(row,childNode);

}

}

 

Bu metodu çalıştırırkende biraz once kontrol ettiğimiz root kaydı ve oluşturulan TreeNode nesnesini parametre olarak yolladıktan sonra oluşturduğumuz bağlantı nesnesi ile Altkategorideki değerleri kontrol ediyoruz ve varsa yine TreeNode oluşturup mevcut Node altına ekliyoruz. Vee sonra kategori ve altındaki elemanları tek tek karşıma geliyor

Umarım yararlı olur

Görüşmek Üzere

M.Zeki Osmancık

 

GDI 2 _ Grafik Çizimi 426 487 mezo

GDI 2 _ Grafik Çizimi

Merhaba arkadaşlar

GDI ile ilgili önceki yazımızda neyin nasıl kullanılacağını görmüştük bu sefer bu GDI metotlarını kullanarak nasıl hesaplamalar yaparız. Seçim sonuçlarında hep görürüz bir pasta dilimi üzerinde partilerin oyları görünür ve yüzde olarak pasta grafikde bir dilim kaplarlar . Bakalım bizim partilerden hangisi ne kadar oyla pastanın neresinde duracak ???

Öncelikle WindowsForm uygulamamız üzerine 2 TextBox 1 Button ve 1 PictureBox atıyoruz.

Bu görüntüyü elde ettikten sonra yapmamız gerek pek de birşey kalmadı aslında sadece kod bloğunu açıp yazmak kalıyor 😀

string[] partiler = new string[10];int[] oylar = new int[10];int siraNo, toplamOy;

Öncelikle yukardaki gibi değerlerimi tutacağım dizilerimi  ve hesaplama yapabilmek içinse değişkenlerimi GLOBAL olarak tanımladım.

Daha sonra buton içersinde değerlerimi alıp bunları grafiksel olarak picturebox içersine çizdireceğim.

Öncelikle 10 elemanlı bir dizi oluşturduğum için dizinin boyutundan çok eleman girilmesin diye bir kontrol yapıyorum. Ardından oylar içersine değer eklerken int değerlerin girildiğinden emin oluyorum…

            if (siraNo == 10){MessageBox.Show(“10 partiden fazla olamaz???”);return;}try

{

oylar[siraNo] = int.Parse(textBox2.Text);

}

catch (Exception)

{

MessageBox.Show(“Oylarda Hata Var”);

return;

}

 

Hem partiler hemde oylar aynı indeks numaralarına yazdırılacak .

            partiler[siraNo] = textBox1.Text;toplamOy += oylar[siraNo];siraNo++;Graphics grp = this.pictureBox1.CreateGraphics();grp.Clear(pictureBox1.BackColor);

Random rnd = new Random();

int i, basAci=0,yayAci ,boy=0;

Color renk;

HatchBrush firca;

Toplam oy sayısını hesaplıyoruz.  Ardından nesnelerimizi tanımlıyoruz.  Picturebox üzerine çizim yapabilmek için Graphics nesnesi oluşturuyoruz. Picturebox da ne varsa siliyoruz. Color değişkeni ve desenli çizim için HatchBrush nesnesi oluşturuyoruz.

Index numarasına göre tüm dizi içersindeki elemanları alıp grafiksel olarak çizebilmek için bir for döngüsü oluşturuyoruz.

            for (i = 0; i <= siraNo-1; i++){yayAci = 360 * oylar[i] / toplamOy;renk = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));firca = new HatchBrush((HatchStyle)rnd.Next(50), renk);grp.FillPie(firca,0,80,200,200,basAci,yayAci);

 

grp.DrawString(“% ” + boy.ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 5, 80 + i * 20);

grp.FillRectangle(firca, 260, 80 + i * 20, 18, 18);

 

grp.DrawString(partiler[i] + ” = ” + oylar[i].ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 290, 80 + i * 20);

basAci += yayAci;

}

 

Çizdireceğimiz FillPie nesnesinin kaç derecelik bir açı ile çizileceğini hesaplamak için yay _aci değişkenini kullanacağız.  Random renk elde edebilmek için Color.FromArgb metodunu kullanarak rastgele renk değerlerini veriyoruz. HatchBrush üzerindede random olarak desen gelebilmesi için gerekli tanımlamayı yapıyoruz. Ardından küçük bir kare rengin hangi partiye ait olduğunu göstermek için hemen yanınada partinin adı ve oy sayısı  yazdırdıktan sonra en son tanımladığım başlangıç açısı bas_Aci değişkenini çizdiğim şeklin yay_Aci değeri kadar arttırıp yeni çizilecek olan pie için başlangıç konumunu belirliyoruz.

Ve son olarak karşımıza çıkan görüntü :

Böylelikle Graphics nesnesindeki değerlerin nasıl işimize yarayacağı biraz daha kafamızda oturmuş olur umarım…

Görüşmek Üzere.

M.Zeki OSMANCIK

GDI 401 376 mezo

GDI

Merhaba arkadaşlar

GDI  = Graphical Design Interface  ile ilgili ufak bir bilgi vermek istiyorum sizlere. GDI, Windows uygulamaları üzerinde çizim işlemleri gerçekleştirmemize olanak tanıyan sınıflardır.

Bu sınıflar ile Windows formlar üzerine veya print nesneleri ile kağıt üzerine bazı çizimler yapabilmemiz mümkün.

Öncelikle bir çizim yapabilmek için de ilk gereken bir kağıt yada çizim yapılacak alandır öncelikle bunu belirtmemiz gerekiyor

Form üzerine çizim yapabilmek için:Graphics grp = this.CreateGraphics();

 

PictureBox üzerine çizim yapabilmek için:

Graphics grp = pictureBox1.CreateGraphics();

 

Çizim alanımızı oluşturduktan sonra ile form veya picturebox üzerine ne çizdireceğimizi seçmemiz gerekiyor ama bunu seçmeden öncede çizmek için gerekli olan kalem veya içi dolu bir şekil çizeceksek fırça gerekiyor. Bunu da şu şekilde tanımlayabiliriz;

Pen kalem = new Pen(Color.Blue);kalem.Width = 5;

 

Brush firca = new SolidBrush(Color.Red) ;

 

Bu şekilde tanımladığımızda kalem ve fircanin özelliklerini değiştirebilir durumda oluyoruz. Kalemin kalınlığı vs gibi özelliklerini ayarlayabiliyoruz. Ya bunlara ihtiyacımız yoksa bunlarla uğraşmadan nasıl yaparız derseniz onun çözümüde şu şekilde…

Pens.Blue 

Brushes.Red

 

Hemen belirteyim bu şekilde kullanım tek başına mümkün olmuyor ancak gerekli kodlar içersinde bu şekilde kullanabilirsiniz biraz aşağıda bunun örneklerini göreceksiniz zaten 😉

Çizim alanı tamam kalem tamam firça tamam eee ne kaldı geriye ??? Sadece çizmek kaldı 😉

Çizim yapabilmek içinde ilk başta örneğini (instance) aldığımız Graphics nesnesini kullanacağız. Ve içersindeki çizim metotları ile form üzerine şekiller çizeceğiz….

grp.DrawLine(Pen nesnesi, X1, Y1, X2, Y2);grp.DrawLine(kalem, 50, 50, 150, 50);

Formun üzerine Line çizerken verilen koordinatlar 2 tane x ve y noktalarıdır bu iki noktayı belirtiriz ve DrawLine metodu bizim yerimize bu iki noktayı birleştirir ve şekildeki gibi bir görüntü ortaya çıkar.

Birde Dikdörtgen Yuvarlak bişiler çizelim.

grp.DrawEllipse(Pen nesnesi, X, Y, Genişlik, Yükseklik);grp.DrawEllipse(kalem, 100, 100, 100, 100);

 

grp.DrawRectangle(Pen nesnesi, X, Y, Genişlik, Yükseklik);

grp.DrawRectangle(Pens.Blue, 200, 100, 100, 100);

 

Bu şekilleri çizerkende gerekli olan veriler önce bir kalem sonra X ve Y noktası ardından çizilecek olan şeklin yükseklik ve genişlik bilgileridir.

Son olarak Pie yani kekden bahsetmek istiyorum 😀 evet sizi keklemiyorum pasta grafik olarak adlandırdımız şekli nasıl çizeriz ona bakalım…

grp.DrawPie(Pen nesnesi, X, Y, Genişlik,Yükseklik , Başlangıç Açısı, Yay Açısı); 

grp.DrawPie(kalem, 50, 200, 100, 100, 0, 270);

Şimdi birde bunların içi dolu olanları nasıl yazılıyor aralarında ne fark var görelim 😉

grp.FillEllipse(firca, 100, 100, 100, 100);grp.FillRectangle(firca, 200, 100, 100, 100);

grp.FillPie(Brushes.Purple, 50, 200, 100, 100, 0, 270);

 

 

 

GDI nesnesi sadece bu işemi yarar diyebilirsiniz 😀 Bu sadece başlangıç bir sonraki yazıda GDI nin asıl nasıl kullanılabildiğini göreceğiz 😉

Görüşmek Üzere…

 

 

C# _ Methods 329 374 mezo

C# _ Methods


Merhaba arkadaşlar programları yazarken çoğu kez bir işlemi birden fazla yerde yapmamız gerekebilir.  Bu da her seferinde aynı kodu yazmak anlamına geliyor ve buda bize hem zaman kaybı  hemde kod karışıklığına neden olacaktır. Peki buna çözüm olarak yapacağımız işlemle alakalı koda bir isim versek ve kullanmak istediğimiz yerde o kadar kodu tekrar tekrar yazmayıp sadece ismiyle çağırsak nasıl olur ? Bence süper olur 😀

Metotlar işte bu işlemi yaparlar bir isimle çağırılarak içersindeki işlemleri tek satırda çağırabilmemizi sağlar. Metotları bir işci olarak düşünebiliriz biz ona ne iş yapması gerektiğini söyleriz ve ismini söylediğimizde o iş yapılır.

Örnek olarak bir öğrenci takip programı yaptığımızı düşünelim. Bu program için ilk önce düşünülmesi gereken form Öğrenci Kayıt formudur ve bu form basit olarak aşağıdaki gibi bi görüntüye sahip olacaktır.

En basit işlemi düşünecek olursak doldurulmuş olan textBox ların temizlenmesini istiyorum ve bunun için form içersine bir Temizle butonu yerleştiriyorum ve bu butonda bütün butonları temizliyorum.

private void btnTemizle_Click(object sender, EventArgs e){

txtAd.Clear();

txtSoyad.Clear();

txtTcNo.Clear();

txtDogumYeri.Clear();

txtVeliAd.Clear();

txtVeliSoyad.Clear();

txtTelefon.Clear();

}

Çalıştırdığımda kodlarımın çalıştığını görüyorum tüm alanlar temizleniyor ;).  Buraya kadar bir sorunumuz yok. Peki Kaydet butonuma bastığımda kaydetme işlemleri tamamlandıktan sonra kullanıcının yeni kayıt ekleyebileceğinide hesaba katıp kaydetme işleminden sonrada textBoxları temizlememiz gerekiyor. Aynı kodları tekrar yazarsak sorun kalmaz ama sadece bu kadarla kalmasak ve bu formda 2 den fazla yerde textBoxları temizlemek istesek her seferinde bu kodları tekrar tekrarmı yazıcaz ? Diyelimki yazdık program çalışıyor. Daha sonra okul yönetimi bizden 2 textbox daha koymamızı istedi. Biz yazdığımız Clear kodlarına 2 satır daha eklememiz gerekicek ama bir çok yerde kullandığımız için bir tanesini bile unutsak sıkıntı çıkacaktır. Bu kodları merkezi bir yerde toplasak ve ihtiyacımız olduğunda sadece ismi ile çağırsak nasıl olur ? 😉

Metotda değişiklik yaptığımızda tüm farklı yerlerde kullandığımız kodlarda değişecektir. Gelin nasıl yapıyoruz bu işlemi görelim . Bir Metot tanımlayarak aynı işlemi birden fazla yerde yapalım 😉

Void MetotAdi()

{

Yapılacak işlem

}

private void btnTemizle_Click(object sender, EventArgs e){

Temizle();

}

private void btnKaydet_Click(object sender, EventArgs e)

{

Temizle();

}

private void Temizle()

{

txtAd.Clear();

txtSoyad.Clear();

txtTcNo.Clear();

txtDogumYeri.Clear();

txtVeliAd.Clear();

txtVeliSoyad.Clear();

txtTelefon.Clear();

}

Görüldüğü gibi tek bir metodu yani işçimi sadece adını çağırarak işimi yaptırabiliyorum. 😉

Void metotlar örnekteki gibi sadece içersinde tanımlanan işi yapar. Geriye bir değer döndürmezler.

Metot içersinde yapılan işlem sonucu geriye bir değer döndürmek istiyorsak geriye dönen değer tipinde bir metot oluşturmamız gerekir. Yani işçimize işini yap ama bana yaptığına dair bilgi getir diyoruz. J

Örnek olarak iki sayıyı toplayarak sonucu geri deger olarak döndüren bir metot yazalım.

private void btnTopla_Click(object sender, EventArgs e){

MessageBox.Show(Topla().ToString());

}

int Topla()

{

int sayi1 = 5;

int sayi2 = 6;

int sonuc = sayi1 + sayi2;

return sonuc;

}

Gördüğümüz gibi içeride yapılan işlemin sonucu metodun tipinde olmak zorunda.

Birde içeriye değer gönderebildiğimiz metot tipleri varki buda metot – işçi metaforunu tamamlayan unsurlardan biz işçimizin eline malzemeleri veriyoruz ona sadece o malzemelerle ona söylenmiş olan işi yapmak kalıyor. Ve yine bize bu malzemelerle yaptığı işin sonucunu dönmek zorunda.

private void btnTopla_Click(object sender, EventArgs e){

MessageBox.Show(Topla(5,6).ToString());

}

int Topla(int sayi1 , int sayi2)

{

int sonuc = sayi1 + sayi2;

return sonuc;

}

Ne kadar kolay değilmi ? 😉

Bir sonraki yazımızda görüşmek üzere.


C# _ Diziler _ Foreach Döngüsü 595 199 mezo

C# _ Diziler _ Foreach Döngüsü


Merhaba arkadaşlar bu yazımızda da dizileri anlamaya çalışacağız.  Bu yazı sonunda dzi nedir , nasıl tanımlanır dizilerdeki boyut dizilerin metotları ve foreach döngüsü ile alakalı bilgi sahibi olacaksınız.

Daha önce değişkenler ile ilgili bir yazımız vardı. Hatırlarsak değişkenler program içersinde bize geçiçi süre gerekli olan değerleri tutabildiğimiz yapılardı örneğin int sayi = 5; diyerek 5 sayısını sayi değişkeninde tutabiliyordum. Peki bu sayi değişkeninde birden fazla değer tutmam gerekirse bunu gerçekleştirebilirmiyim ? Cevap değişkenlerle hayır ama Dizilerle evet.

Sizinde anlayacağınız gibi dizi değişkenleri, aynı tipte birçok veriyi bir arada tutmayı sağlar. Benzer işlemlerde kullanılan değişkenler bir dizi altında listelenebilir. Yani ben sayi değişkenimi dizi olarak tanımlarsam o zaman birden fazla değeri içersinde tutabilirim.

Dizilerin tanımını yaptıktan sonra gelin bu dizi nasıl birşeymiş nasıl yazılırmış ona bir göz atalım.  Dizi tanımları veritiplerinin yanında [] simgeleri ile yapılır.

<veri tipi> [] dizi ismi = new <veri tipi> [dizi eleman sayısı]
String[] isimler;İnt[] sayilar;

Float[] paralar;

Byte[] yaslar;

Dizilerin kaç eleman içereceği, dizi tanımlanırken ya da daha sonra belirtilebilir. Şu şekilde tanımlanabilirler:

int[] sayilar = {3, 8, 2, 6};

int[] sayilar = new int[6]{4, 2, 5, 6, 7, 0};

int[] sayilar = new int[5];

Dizilerin indis numaraları 0 dan başlar ve devam eder. Orneğin isimleri tutacağımız bir dizi tanımladık:

string[] isimler = new string[4];

değerlerini atarken yapacağımız işlem şu olacaktır.

İsimler[0]=”Zeki”;

İsimler[1]=” Yudum”;

İsimler[2]=”Ali”;

İsimler[3]=” Orhan”;

Küçük bir dizi uygulaması yapalım. Bir dizi ve elemanlarını tanımlayarak ListBox içersinde bu değeri gösterelim.

İşte bu kadar kolay bir değişken tanımlar gibi fakat içersinde birden fazla değer taşıyabilen bir değişken gibi düşünebiliriz.

Peki birden fazla boyuta sahip diziler tanımlamak mümkünmü ?  Yani tanımladığımız dizinin 1 elemanıda birkaç değere sahip olsa …

Diziler tek boyutlu olduğu gibi, birkaç boyutlu diziler de tanımlanabilir.  Örneğin :

int [,] matris = new int[5,6];

Bu diziyi tanımladığımızda önce 5 elemanlı bir dizi ardından bu dizinin her elemanı içinde 6 elemanlık bir dizi tanımlamış oluruz.  Yani 2 boyut oluşturmuş oluruz.

Bu dizide bir boyut daha olsaydı, o boyutun her elemanı için diğer boyutlardaki 30 eleman bulunacaktı. Çok boyutlu dizilerin eleman sayıları boyutlarındaki eleman sayılarını çarparak hesaplanabilir.

int [,,,,] dizi = new int[boyut1,boyut2,boyut3,… ,boyutn];

Dizilerin boyutlarınada göz attıktan sonra gelin isterseniz bir kaç metodunada bakalım.

Dizilerin Metotları

Array.Resize();

Resize metodu mevcut dizimizin eleman sayısını istediğimiz kadar arttırır. Bir örnekle bakalım bu olaya bir form üzerinde listbox textbox ve butonumuz olsun ve textbox a yazdığımız değer string bir diziye ve listbox a eklensin istiyorum. İlk etapta ne kadar değer girileceğini bilemiyeceğimizden önce 1 elemanlı bir dizi tanımlıyorum ve her eleman eklendiğinde dizi boyutunu arttırıyorum.

Array.Clear();

Dizimiz içersindeki değerleri temizlemek isteyebiliriz işte bu gibi durumlarda Array.Clear kullanıyoruz. Biraz önce yaptığımız proje üzerinde ufak değişikliklerle Clear metodunu inceleyelim.

Foreach Döngüsü

Daha önceki yazımızda bahsettiğimiz döngüler arasında bir tane daha vardı ama ona bu konunun sonunda değinmek daha mantıklı sanki.

Foreach döngümüz bir dizi veya kolaksiyonun her elemanı için yapısındaki kodları çalıştıran bir döngüdür.

foreach (<tip değişkeni > in <koleksiyon> ){

Yapılacak işlemler

}

Bilgiyle Kalın…
M.Zeki Osmancık

C# | OOP Terminolojisi 150 150 mezo

C# | OOP Terminolojisi



Access Modifier : Bir tipe veya tipin üyelerine erişimi sınırlayan private, protected, internal, public gibi kelimelerdir.

Accessible Member : Verilen tip tarafından ulaşılabilen üyedir. Bir tip ile erişilebilen bir üye başka bir üye tarafından erişilebilir olmayabilir.

Accessor : Bir özellik (Property) ile ilişkilendirilmiş Özel (private) veri alanı (data field) üyenin değerini alan veya ayarlayan metodlardır. Okunur-Yazılır özellikler get ve set erişimcilerine sahipken salt okunur özellikler sadece get erişimcisine sahiptirler.

Anonymous Method : Bir delegeye parametre olarak geçilirilen bir kod bloğudur.

Base Class : Türetilmiş sınıf (Derived Class) tarafından miras alınan sınıftır (Inherited Class).

Call Stack : Çalıştırma zamanında (runtime) programın başından başlayarak çalıştırılacak ifadeye kadar olan yapılan metod çağrılarının dizisidir.

Class : Nesneyi tanımlayan, nesneye şablon oluşturan veri tipidir. Sınıflar veri ve veriyi etkileyen metodlardan her ikisini de içerebilirler.

Constructor: Bir sınıf veya yapı üzerinde bulunan ve o tipteki nesneleri oluşturan özel metodlardır.

Delegate : Bir metodu referans eden bir tiptir. Bir delege metoda atandığında tam olarak o metod gibi davranır.

Derived Class : Başka bir taban sınıfın davranışına ve verisine erişmek, geliştirmek veya değiştirmek için miras yöntemini kullanan sınıftır.

Destructor : Örneğin sistem tarafından sonlandırılmasını hazırlayan, sınıf veya yapı üzerindeki özel bir metodtur.

Event : Bir değişikliğin bilgilendirmelerini gönderen sınıf veya yapı üyesidir.

Field: Sınıfın ya da yapının doğrudan erişilen veri üyesidir.

Generics : Jenerikler, bir sınıf ya da metodun bir tip parametresi ile tanımlanabilmesine olanak sağlarlar. İstemci kodu tipin örneğini yaratırken parametre olarak tanımlanan tipi belirli bir tipte değişken olarak tanımlar. Böyle parametrenin hangi tipte olduğu tanımlandığından sınıf ya da metodta o tip olarak kullanılabilir.

IDE (Integrated Development Environment) : Derleyici, debug edici, kod düzenleyici ve tasarım araçları gibi çeşitli geliştirme araçları için birleştirilmiş bir arayüz sağlayan uygulamalardır.

Immutable Type : Örnek yaratıldıktan sonra, örneğinin veri, alan ve özellikleri değişmeyen tiplerdir. Değer tiplerinin çoğu böyle tiplerdir.

Inaccessible Member : Belirtilen bir tip tarafından erişilemeyen bir üyedir. Bir tipe Erişilmez bir üyenin başka bir tipe de erişilmez olması gerektiğine dair bir zorunluluk yoktur.

Inheritance : C#, Miras almayı destekler. Yani bir sınıf (class) taban sınıf (base class) olarak adlandırılan sınıftan türetilir ve aynı metod ve özellikleri miras alır. Bunu sınıfa Türetilmiş Sınıf (Derived Class) denir.

Interface : Sadece public metod, olay ve delegelere ait imzaları içeren bir tiptir. Arayüzü miras alan bir nesne arayüzde imzaları tanımlanan tüm metod, olayları geliştirmek zorundadır. Sınıflar veya Yapılar (Structs) herhangi bir sayıda arayüzden miras alabilirler…

Iterator : Öteleyici, bir sınıfın içerdiği bir koleksiyon veya diziyi (array) sınıf kullanıcılarının foreach ile kullanabilmesine olanak sağlar.

Member : Bir sınıf (class) ya da yapı (struct) üzerinde tanımlana alan (field), özellik (property), metod (method) veya olaylara (events) o sınıfın üyeleri (class members) denir.

Method: Bir sınıf (class) ya da yapı (struct) için davranışı sağlayan isimlendirilmiş kod bloğudur.

Mutable Type : Örnek yaratıldıktan sonra, örneğinin veri, alan ve özellikleri değiştirilebilen tiplerdir. Referans tiplerinin çoğu böyle tiplerdir.

Nested Type : Diğer bir tipi tanımının içinde tanımlanmış tiptir.

Object : Sınıf örneğidir (instance). Bir nesne bellekte bulunur ve verisi ve bu veriler üzerinde etkisi olan metodları vardır.

Property : Özellikler, erişimcileri aracılığı ile bir veri üyesine ulaştırırlar.

Refactoring :
Bilgisayar terminolojisinde bilgisayar yazılımının çıktılarını ve işlevlerini değiştirmeden iç yapısının yeniden düzenlenerek uygulamanın geliştirilmesi, iyileştirilmesi demektir. Kısaca önceden girilmiş kodun tekrar kullanılması diyebiliriz. Visual Studio C# düzenleyicisi akıllıca kodunuzu tekrar biçimlendirebilir. Mesela işaretlediğiniz bir kod bloğunu bir hamleyle bir metoda dönüştürebilirsiniz.

Reference Type : Bir veri tipidir. Referans tipi olarak tanımlanan bir değişken verinin depolandığı konumu işaret eder.

Static : Statik olarak tanımlanan bir sınıf ya da metod “new” anahtar kelimesi ile ilklendirilmeden varolabilir.
Örneğin Main() statik bir metoddur.

Struct : Tipik olarak bazı mantıksal ilişkileri olan değişkenler içermesi için kullanılan birleşik veri tipidir. Yapılar aynı zamanda metodlar ve olaylar içerebilirler. Miras almayı desteklemezken arayüz kullanımını desteklerler. Sınıflar referans tipiyken, yapılar değer tipidir.

Value Type : Öbek (Heap) üzerine yerleştirilen referans tiplerine karşın yığın (stack) üzerine yerleştirilen veri tipidir. Yapı ve null değer alabilen (Nullable) tiplerin de olduğu gibi Nümerik tipleri de içeren Yerleşik (built-in) tiplerin hepsi değer tipleridir. Sınıf tipi ve string tipi referans tipleridir.

kaynak: http://msdn2.microsoft.com/en-us/library/ms173231.aspx

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Döngüler _ For & While 490 448 mezo

C# _ Döngüler _ For & While


Merhaba arkadaşlar bu yazımızda C# programlama içersinde bulunan döngüleri sizlere anlatmaya çalışacağım. Bu yazının sonunda ardarda işlemleri nasıl kısa yolla yapabilirsiniz, for döngüsü ve while döngüsü ile ilgili bilgi sahibi olacaksınız. Haydi başlayalım… 😀
Döngüler programlarımızda ardarda yada sıralı şekilde yaptıracağımız işlemleri için kullanılır. Fazla kod ,zaman kaybı ve performans açısından yarar sağlarlar. Diyelim ki öğrenci kaydı yapabileceğimiz bir windows form tasarlıyoruz ve bu windows formu üzerinde combobox nesnemiz yer almakta yıl kısmının yanlış yazılmasını engellemek için biz girerek kişinin sadece seçme işlevini yerine getirmek istiyoruz. İlk aklımıza gelen ComboBox nesnemizin items özelliği üzerinden tüm bilgileri girmek oldu değilmi ?

İster items özelliğinden dolduralım istersek kod ile dolduralım yinede bu işlem bize inanılmaz vakit kaybına neden olacaktır. Peki bir kolay yolu yokmu bu işi yapmanın tabi ki var. Döngüler bu konuda bizlere yardımcı oluyorlar.   Yukarıda bahsettiğimiz işlem için sadece döngü kullanmamız yetecektir.

For Döngüsü

for (başlangıç; koşul;artım){

Yapılacak işler;

}

Belirtilen başlangıç değerinden itibaren koşul sağlanana kadar içine yazılan kod parçasını çalıştırır ve bize sıralı işlemlerimizi hızlıca yapmamızı sağlar. Buna göre yukardaki işlemimiz nasıl oluyor görelim.

Ne kadar kolay değilmi ? 😀

Peki bu for döngüsü içersinde bir erken geçiş sağlamak istersek o zaman ne yapmalıyız?

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

continue;

}

comboBox1.Items.Add(i.ToString());

}

Biraz önce ki doldurma işlemi sırasında bir koşul sağlanıyorsa o koşulun sağlandığı değeri atlayarak döngü devam eder. Yani burada i 1965 olduğunda o satırdaki işlemi atlayacak ve 1966 dan devam edecek

Continue ile oluşan işlemi anladıysak birde koşul sağlandığında döngü işlemine son veren bir kodumuz daha var :

Break

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

break;

}

comboBox1.Items.Add(i.ToString());

}

MessageBox.Show(“Döngü Sonlandırıldı.”);

Yine aynı işlem için break işlemi yapıldığı zaman koşul sağlanıyorsa döngüden çıkarak sadece 1965 e kadar olan sayıları ComboBox nesnesi üzerine ekler.

Return

Bir döngünün sonundaki erken geçişi sağlar koşul sağlanmıyorsa hiç bir işlem yapmadan çıkar.

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

return;

}

comboBox1.Items.Add(i.ToString());

}

MessageBox.Show(“Döngü Sonlandırıldı.”);

While Döngüsü

Bir başka döngü türü olan while bir koşul sağlanıyorken dönmeye devam eden döngü çeşididir. Koşul false ise döngü sona erer.

while(koşul){

Yapılacak işler;

}

Aynı örneğimizi While ile yaptığımızda bu kez biraz syntax değişiyor ama yaptığımız işlem aynı.

Koşulumuz sağlandığı sürece yani i 2010 dan küçük olduğu sürece işlemimizi sürdürdü ve yine aynı örneğimizdeki Combobox itemlerini ekledik.

While i en güzel anlatan örnek belkide Eşşek Sudan Gelinceye Kadar Dayak Yemek deyimi.

Hadi gelin bu örneği yapalım 😀

Do While Döngüsü

Diğer döngülerden farkı koşul sonda kontrol edilir. Buda döngünün en az 1 kere çalışacağı anlamına gelir.

Do{

Yapılacak işler;

} while (koşul);

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Karar Yapıları _ If-Else & Switch 522 236 mezo

C# _ Karar Yapıları _ If-Else & Switch


Gerçek hayatta bizlerin bazı kararlar almak zorunda kaldığımız gibi programımızada karar alma yeteneğini kazandırabiliriz çıkabilecek tüm sonuçları değerlendirerek ilgili işlemi yapabilecek duruma gelebilir. Kısacası programımıza düşünme yeteneği kazandırabiliriz.

If – Else Karar Yapısı

If..Else deyimi bir Boolean ifadeyi degerlendirerek program denetimi belirtilen deyim gruplarına geçirir. Basit bir örnek olarak tatile çıkmak istiyorsunuz ve mevcut paranız 500 lira. Afirmasında  1 haftalık tatil 900 lira   ,Bfirmasında 850 lira ,Cfirmasında 450 lira ,Dfirmasındada 300 lira bu 4 firma arasında seçim yapmak gerekirse ilk iki firmayı eledik bile. C ve D firmaları arasındaki seçimimizede orada yapacağımız harcamaları göz önünde bulundurarak değerlendirecek olursak en uygun D firması olacağına karar veririz. İf yapılarıda bu şekilde çalışır. İf karar blogları aşağıda belirtilen formatta yazılır.

Bir çok program ve web sitesinde gördüğümüz kullanıcı adı ve şifrenin doğru olduğuna karar verdiğimiz basit bir program yazalım.

Swicth – Case

Mantık olarak “if else” koşul yapısına benzer. Kendisine gönderilen parametreyi değerlendirir ve ona göre ayrılan kod bloğunu çalıştırır. Yani eleme yaparak parametrenin sahip olduğu değeri ile eşitlenen kod bloğunu çalıştırır.

switch(değişken)

{

case kosul1:

//kodlar bu panele gelecek

break;

case kosul2:

//kodlar bu panele gelecek

break;

case kosuln:

//kodlar bu panele gelecek

break;

default:

//eğer hiç bir koşul desteklenmiyorsa bu koşul gerçekleşecek

break;

}

Bilgisayarımızın saatini kontrol ederek günün çeşitli zamanlarında bize karşılama mesajı çıkartan bir uygulama yazalım

Bilgiyle Kalın…
M.Zeki Osmancık

Algoritma 503 345 mezo

Algoritma


Algoritma Nedir?

Algoritmalar bir işin nasıl yapıldığını adım adım hangi etaplardan geçerek gerçekleşeceğini gösteren bir çalışma planıdır aslında. Algoritmalar  programlama dili değildir  sadece programlama dillerine klavuz görevi gören bir yöntem dizisidir.Algoritmalar yazılı şekilde olabileceği gibi semboller dizilimi ilede  karşımıza çıkabilirler.

Algoritmalardaki yöntemler sırası

  • Veri Girişi
  • İşlem
  • Kararlar

Veri Girişi : Yapılan uygulamaların runtime kısmında kullanıcı tarafından girilecek olan verilerdir.

Kararlar: Karar ve kontrol yapıları algoritmanın akışını yönlendiren önemli kavramlardır. Girilen veya işlem sonucu elde edilen veriler kontrol edilerek algoritma istenilen yere yönlendirilir.

İşlem: Algoritmada belirtilen kararlar ve girilen veriler ile hangi işlemlerin gerçekleşeceğini belirtiğimiz yöntemlerdir.

Özellikleri

  • Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.
  • Çıktı: En azından bir değer üretilmeli.
  • Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.
  • Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.
  • Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.

Akış Diagramları

Bu diagramlar daha anlaşılır bir  yapıya sahip olmaları için bazı semboller ile belirtilen algoritma yöntemidir.Akış diagramları farklı semboller yardımı ile hazırlanırlarşekilleri itibari ile anlaşılması kolay problem çözümünde

yardımcı bir yöntemdir. Şimdi bazı diagram şekillerini tanıyalım ve bir işlemin algoritmasını çizelim.

Çay Demleme İşleminin Algoritması

•      Kullanıcıdan su verilmesi beklenir.

•      Suyu ısıtma işlemi yapılır

•      Suyun kaynadığı kontrol edilir. Kaynamamışsa ısıtmaya devam eder

•      Demliğe çay konulur.

•      Kullanıcıdan alınan demleme bilgisi ile şimdiki zaman toplanır ve süre bulunur .

•      Şimdiki zaman küçükse çay demlenmeye devam eder.

•      Çayın demlendiği mesajla bildirilir.

Çay Demleme İşlemi Algoritma Diagramı

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Hatalar ve Giderilmeleri _ Try-Catch 353 238 mezo

C# _ Hatalar ve Giderilmeleri _ Try-Catch


Hata Nedir ?

Programcılar veya programı kullanacak olan  son kullanıcılar kimi zaman bazı kullanım yada mantıksal hatalar yapabilirler. Bu hatalar gözden kaçabilen mantıksal hatalar olabilir son kullanıcının programı kullanması sırasında veya test aşamasında karşımıza çıkabilir. İşte bu hataların giderilmesi hata çıktığı anda işlem kod bloğunu terk etmesi için işlemlerimizi try bloğu içersinde yazıyoruz bu blog içersinde bir hata meydana geldiğinde catch bloğu ile hata durumunda ne gibi bir işlem yapacağımızı belirtiyoruz.

Hatanın Yakalama

Örnek olarak iş yerimizde çalışan sarışın bir sekreterimiz için 2 sayıyı toplaması için çok basit bir hesap makinesi yazmış olalım. Sekreterimiz bu hesap makinesini kullanırken sayısal değerler kullanmak zorunda. Peki sayısal olmayan bir değer girdiğinde programın tepkisi ne olacaktır ?

Bu sorunu program içersinde hata kontrolü yaparak çözebiliriz. Eğer işlem bloğumuzda hata oluşursa hata yakalanacak işlemden çıkacak ve hata durumunda ne yapmasını istemişsek onu yapacak.

Finally

Birde programlarımızda hata olsun yada olmasın çalışmasını istediğimiz bazı kodlar yapılmasını istediğimiz işlemler olacaktır. Bunlar hata çıkması durumunda bile çalışacak olan kod bloklarıdır. Finally blogu içersinde yer alan kodlar her ne hata olursa olsun çalışacaktır.

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Değişkenler ve Veri Tipleri 507 316 mezo

C# _ Değişkenler ve Veri Tipleri


Merhaba arkadaşlar bu yazımda sizlere değişkenler denilen yapıları anlatmaya çalışacağım. Haydi başlayalım 😉

Değişken nedir nasıl tanımlanır?
Bir program çalıştırırken tüm veriler geçici olarak hafızada tutulur. Değişkenler bu verilerin isimlendirilmesi işlemidir. Değişken mantığı günlük yaşamdada çok kullanılan bir mantıktır aslında. Aklımızdan iki sayı tutmamız istendiğinde ve bu sayılarla alakalı işlem yapmamız istendiğinde aslında isimlendirecek olursak sayi1 ve sayi2 olarak o sayıları aklımızda tutuyoruz. İşte bu sayi1 ve sayi2 sadece o an geçiçi bir süre içinde işlem yapmamız için kafamızda ürettiğimiz değişkenlerdir. Programlamadada geçiçi olarak veri tutmak istediğimizde değişkenleri kullanırız.
<veri tipi> <değişken adı>; şeklinde tanımlanırlar.
string isim;
int rakam;
Tanımlama Kuralları
•Tanımlanan değişkenlerin tipleri değişken isminden önce belirtilir.
•Değişken isimlerini belirlerken bazı noktalara dikkat etmek gerekir. Boşluk, nokta, soru işareti, noktalı virgül, çift tırnak, tek tırnak, aritmetik  operatörler, karşılaştırma ve atama operatörleri, parantezler kullanılamaz.
• Sayı ile başlayamaz.
•Visual C#.NET dilinde tanımlı anahtar kelimeler kullanılamaz.
•Değişken isimlerinde Türkçe karakter kullanılırsa, farklı dil seçenekli işletim sistemlerinde çalışma anında hata üretecektir.

Veri Tipleri

Değişkenler program içinde, tuttukları verilere ulaşmak için kullanılır. Ancak değişkenlere ulaşmak, tanımlandıkları yerde veya alt  bloklarda mümkündür. Bu kavrama değişkenlerin kapsam alanı (Scope) denir.
Kapsam alanı dışındaki bir yerden değişkene ulaşılamaz.

Veri tipi, değişkenlerin tuttukları değerlerin türünü ve bellekte tutulacak boyutunu tanımlar. Değişkenleri veri tipleri ile tanımlarken verinin  boyutuna göre bir veri tipi seçilmelidir. İki tip veri tipi mevcuttur Değer Tipleri (Value Type)  ve Referans Tipleri (Reference Type)

Değer Tipleri (Value Type)

Değer tipleri veriyi direk olarak bellek bölgesinden alırlar

Referans Tipleri (Reference Type)


Visual Studio 2008 Genel Bir Bakış 500 339 mezo

Visual Studio 2008 Genel Bir Bakış


Merhaba Arkadaşlar.

Yazıya başlamadan önce sizleri bir terim ile alakalı bilgilendirmek istiyorum bu terim ; IDE  sakın harddisklerdeki bağlantı türü ile karıştırmayın 😉 IDE = Integrated Development Environment yani Entegrasyonlu Geliştirme Platformu programların gelişme aşamalarının gerçekleştiği platformlardır. Farklı diller için farklı IDE ler geliştirilmiştir.

Biz bu IDE ler içersinde en gelişmiş olanını kullanacağımız için bende bu gelişmiş IDE yi sizlere basitçe tanıtmak istedim. Kullanacağımız IDE :

Visual Studio

Teknolojisini basit cümlelerle anlatmak zor elbette ama özetlemek gerekirse çok gelimiş özelliklere ve yardımcı araçlara sahip bir IDE dir. Sadece tek bir dil için geliştirilmemiştir bir önceki yazımızda bahsettiğimiz  .Net uyumlu tüm programlama dillerinin desteklendiği ve aynı projelerde dahi çalıştırılabildiği bir ortamdır.  Program geliştirenlere kullanışlı ve kolay bir ortam sağlayarak uygulamaların daha işlevsel olması konusunda bizlere destek sağlar.

Peki ne var bu Visual Studio nun içersinde.

Visual Studio’yu genel görünüm olarak 4 bölümde inceleyebiliriz;

*Çalışma Sayfaları

*Araç Çubukları

*Menüler

*Pencereler

Visual Studio programımızı ilk açtığımızda bizi Başlangıç sayfası karşılıyor ve bizlere (eğer internete bağlıysak) MSDN den çeşitli gelişme ve haberleri sunuyor. Visual studio içersinde web sayfalarıda açabiliyorsunuz bu arada. Start Page başlangıç sayfamızın bulunduğu kısma daha sonra projelerimizi yazacağımız sayfalarda geliyor işte bu alana Çalışma Sayfaları diyoruz. Sekmeler halinde pencerelerle çalışabileceğimiz bu çalışma alanı hem form veya web sayfaları tasarımlarında hemde kod yazarken çokça kullanacağımız bir alan olacaktır.

İkinci olarak çoğu programda gelenek haline gelmiş olan Araç Çubuklarımız var. Bu araç çubukları menü komutları için görsel kısayollar sunarak işimizi kolaylaştırırlar. Benzer işlemler aynı araç çubuğu üzerinde gruplanarak kullanım dahada işlevsel hale gelir. Yada istersek biz bu araç çubukları üzerindeki görsel kısayolları değiştirerek kişiselleştirebiliriz de.

Üçüncü olarak hemen hemen her programda  görmeye ve kullanmaya aşina olduğumuz Menüler aslında tüm programlarda benzer niteliklerdedir. Çeşitli komut ve yardımcı pencerelere ulaşmamızda bize kolaylık  sağlarlar.

Menülerde bulunan temel başlıkları kısaca tanıyalım :

File: Adındanda anlaşılacağı gibi dosya işlemlerinin yapıldığı menüdür yeni proje yada varolan projelerin açılması gibi işlemleri bu menü seçeneği içersinde bulunan seçeneklerden yönetebiliriz.

Edit : Tüm yazı ile ilgili düzenleme işlemlerinin yer aldığı menüdür. Kopyala Kes Yapıştır Bul Değiştir gibi seçenekleri mevcuttur.

Project: Üzerinde çalıştığımız projenin özelliklerinin yönetilebileceği referans ve dosya ekleme çıkarma gibi işlemlerin var olduğu menüdür.

Built: Geliştirdiğimiz projelerin çalıştırılmak üzere içersinde bulunan komutların derlenmesi için gereken komutlara ulaşabildiğimiz menüdür.

Debug : Adındanda anlaşılacağı gibi Hata bulma ve ayıklama ile ilgili tüm seçeneklerin bulunduğu menüdür.

Tools : Visual Studio ile birlikte yüklenen yardımcı araçların bulunduğu menüdür. Ayrıca Visual Studio ile alakalı ayarların yapılabildiği Options seçeneğide bu menü  altında yer alır.

Ve Help menüsü sanırım bunun açıklamasına gerek yoktur. =)

Visual Studio içersindeki yolculuğumuza devam edelim çalışma sayfaları araç çubukları menüler derken son olarak belirttiğimiz Pencereler  seçeneğine geldik

Dördüncü ve son olarak bahsedeceğimiz Pencerelerden kasıt ise Visual studio içersinde uygulama geliştirme aşamasında sık sık kullanılabilecek olan birçok elemanı bir araya getiren yada durum belirten pencerelerdir.

Bu pencerelerden çok kullanılan bir kaçını tanımlamak gerekirse:

Properties: Projedeki tüm öğelerin özelliklerinin yer aldığı bir penceredir. İstenen değişiklikleri yine bu pencere üzerinden gerçekleştirmekde mümkündür.

ToolBox :Projelerde kullanılan çeşitli kontrollerin listelendiği penceredir. Buradaki öğeler sekmeler içersinde gruplanmıştır.

Solution Explorer : Projeler bir solution (çözüm) içersinde yer açılır. Bir çözüm içersine farklı dilde ve tipte projeler dahil edilebilir.Bu pencere solution yapısını gösterir ve ilgili işlemlerin yapılmasına olanak sağlar.

Uygulama geliştirirken en çok kullanacağımız pencereler olacaktır.

Visual Studio yu basitçe olsa tanımış olduk geliştirme ortamını etkin bir şekilde kullanmak önemlidir. Bu yüzden bu yazının klavuzluğunda  sizde biraz merak ile Visual Studio içersinde ne var ne yok karıştırarakda bulabilirsiniz.

Görüşmek Dileğiyle.

Microsoft .Net ‘ e Giriş 547 203 mezo

Microsoft .Net ‘ e Giriş

Merhaba arkadaşlar programlama ile alakalı ilk makaleme tabiki işin en başından başlamam gerekiyor.  Elimden geldiğince size yararlı bilgiler sunmaya çalışacağım.Programlama dilleri ile ilgileniyorsak bu kelimeyi cok duymussunuzdur.
.NET
Peki nedir bu .Net denilen şey ?Tek başına tanımlanamayacak bir sistemler bütünüdür aslında; Microsoft tarafından geliştirilen  farklı teknoloji , araç ve programlama dillerinin bir arada, tek bir iskelet üzerinde çalışmasına olanak veren uygulama geliştirme platformudur.
Uygulama derken neyi kastettim peki , aslında o kadar geniş bir kavram ki .Net platformunda uygulama diyorsak eğer  aklınıza gelebilecek her türlü uygulamayı bu kelime içersine sığdırabiliriz. Web ,Windows,Mobile vb bir çok uygulamayı geliştirmemize olanak tanır .
.Net güzel bir şeymiş tanımını duyunca heyecanlandık . Nasıl çalışır peki ? Nasıl bu kadar geniş bir çerçevede programcılara özgürlük sunabilir. Gelin .Net içersinde kısa bir yolculuk yapalım:
Öncelikle .Net ile uygulama geliştirebilmemiz için onun kaynağını bilgisayarımıza yüklemiş olmamız gerekiyor.   BCL (Base Class Library ) Temel Sınıf Kütüphanesi  adı verilen bu kütüphane uygulama geliştirmek için gerekli olan arayüz ,sınıf ,fonksiyonları barındırır bizlerde bu arayüz sınıf ve fonksiyonları kullanalarak uygulamalarımızı kolayca geliştirebiliriz.
.Net çok güzel  ve kütüphane olmak zorunda bunları öğrendik   peki asıl soru geliyor hangi programlama dilini kullanmak gerekiyor?
Microsoft bu soruya bizim için çok radikal bir biçimde karar vermiş bile .Net platformunu destekleyen herhangi bir programlama dili cevabı sanırım bizim için yeterli . Her .Net uyumlu dilin kendine özgü bir derleyicisi vardır. Herhangi bir dilde yazılmış uygulama derlendiğinde o dilin derleyicisi kodları ortak bir dile çevirir.
Oluşan bu ortak dilin adı ise MSIL (Microsoft Intermediate Language) yani Microsoft un Ortak Dili . .Net platformu destekli programlama dillerinden herhangi biri veya birden fazlası ile bir uygulama geliştirdiğimizde o dilin derleyicileri  kodları alıp MSIL e çevirerek hepsinin aynı anda makine diline çevrilmesini sağlar.
Buraya kadar geldik yolculuğumuz sürüyor uygulamamızı yazdık derledik  MSIL e çevirdik daha sonra bu kodların işletim sistemine ulaşması gerekiyor yani makine kodlarına çevrilmesi gerekiyor bu işide
CLR devralıyor ve MSIL kodlarımızı alıp makine koduna çeviriyor ve işletim sistemine iletiyor.
Bu işlemi yaparken JIT (Just In Time) derleme yöntemini kullanarak görevini tamamlıyor.
Böylelikle  .Net platformunda geliştirdiğimiz bir uygulamamızın hangi devrelerden geçerek karşımıza geldiğini ve azda olsa .Net platformunun mantığını umarım anlayabilmişsinizdir.
Sonraki Yazılarda Görüşmek Üzere…

    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.