C # - Sınıflar
Bir sınıf tanımladığınızda, bir veri türü için bir plan tanımlarsınız. Bu aslında herhangi bir veriyi tanımlamaz, ancak sınıf adının ne anlama geldiğini tanımlar. Yani, sınıfın bir nesnesi nelerden oluşur ve bu nesne üzerinde hangi işlemler yapılabilir. Nesneler, bir sınıfın örnekleridir. Bir sınıfı oluşturan yöntemler ve değişkenler, sınıfın üyeleri olarak adlandırılır.
Sınıf Tanımlama
Bir sınıf tanımı, class anahtar sözcüğü ve ardından sınıf adı ile başlar; ve bir çift kaşlı ayraç içine alınmış sınıf gövdesi. Aşağıda bir sınıf tanımının genel şekli verilmiştir -
<access specifier> class class_name {
// member variables
<access specifier> <data type> variable1;
<access specifier> <data type> variable2;
...
<access specifier> <data type> variableN;
// member methods
<access specifier> <return type> method1(parameter_list) {
// method body
}
<access specifier> <return type> method2(parameter_list) {
// method body
}
...
<access specifier> <return type> methodN(parameter_list) {
// method body
}
}
Not -
Erişim belirticileri, üyelerin yanı sıra sınıfın kendisi için erişim kurallarını belirtir. Bahsedilmediyse, bir sınıf türü için varsayılan erişim belirticisiinternal. Üyeler için varsayılan erişimprivate.
Veri türü değişkenin türünü belirtir ve dönüş türü, varsa, yöntemin döndürdüğü verilerin veri türünü belirtir.
Sınıf üyelerine erişmek için nokta (.) Operatörünü kullanırsınız.
Nokta operatörü, bir nesnenin adını bir üyenin adıyla ilişkilendirir.
Aşağıdaki örnek, şimdiye kadar tartışılan kavramları göstermektedir -
using System;
namespace BoxApplication {
class Box {
public double length; // Length of a box
public double breadth; // Breadth of a box
public double height; // Height of a box
}
class Boxtester {
static void Main(string[] args) {
Box Box1 = new Box(); // Declare Box1 of type Box
Box Box2 = new Box(); // Declare Box2 of type Box
double volume = 0.0; // Store the volume of a box here
// box 1 specification
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// box 2 specification
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// volume of box 1
volume = Box1.height * Box1.length * Box1.breadth;
Console.WriteLine("Volume of Box1 : {0}", volume);
// volume of box 2
volume = Box2.height * Box2.length * Box2.breadth;
Console.WriteLine("Volume of Box2 : {0}", volume);
Console.ReadKey();
}
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Volume of Box1 : 210
Volume of Box2 : 1560
Üye İşlevleri ve Kapsülleme
Bir sınıfın üye işlevi, tanımına veya prototipine diğer herhangi bir değişkene benzer sınıf tanımı içinde sahip olan bir işlevdir. Üyesi olduğu sınıfın herhangi bir nesnesi üzerinde çalışır ve bu nesne için bir sınıfın tüm üyelerine erişime sahiptir.
Üye değişkenler, bir nesnenin özellikleridir (tasarım açısından) ve kapsüllemeyi uygulamak için gizli tutulurlar. Bu değişkenlere yalnızca genel üye işlevleri kullanılarak erişilebilir.
Bir sınıftaki farklı sınıf üyelerinin değerini belirlemek ve elde etmek için yukarıdaki kavramları koyalım -
using System;
namespace BoxApplication {
class Box {
private double length; // Length of a box
private double breadth; // Breadth of a box
private double height; // Height of a box
public void setLength( double len ) {
length = len;
}
public void setBreadth( double bre ) {
breadth = bre;
}
public void setHeight( double hei ) {
height = hei;
}
public double getVolume() {
return length * breadth * height;
}
}
class Boxtester {
static void Main(string[] args) {
Box Box1 = new Box(); // Declare Box1 of type Box
Box Box2 = new Box();
double volume;
// Declare Box2 of type Box
// box 1 specification
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// box 2 specification
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// volume of box 1
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}" ,volume);
// volume of box 2
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);
Console.ReadKey();
}
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Volume of Box1 : 210
Volume of Box2 : 1560
C # Oluşturucular
Bir sınıf constructor o sınıftan yeni nesneler yarattığımızda çalıştırılan bir sınıfın özel üye işlevidir.
Bir kurucu, sınıfın adıyla tam olarak aynı ada sahiptir ve herhangi bir dönüş türüne sahip değildir. Aşağıdaki örnek, kurucu kavramını açıklamaktadır -
using System;
namespace LineApplication {
class Line {
private double length; // Length of a line
public Line() {
Console.WriteLine("Object is being created");
}
public void setLength( double len ) {
length = len;
}
public double getLength() {
return length;
}
static void Main(string[] args) {
Line line = new Line();
// set line length
line.setLength(6.0);
Console.WriteLine("Length of line : {0}", line.getLength());
Console.ReadKey();
}
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Object is being created
Length of line : 6
Bir default constructorherhangi bir parametreye sahip değildir, ancak ihtiyacınız varsa, bir kurucu parametrelere sahip olabilir. Bu tür kurucular denirparameterized constructors. Bu teknik, aşağıdaki örnekte gösterildiği gibi, nesnenin oluşturulduğu sırada bir nesneye başlangıç değeri atamanıza yardımcı olur -
using System;
namespace LineApplication {
class Line {
private double length; // Length of a line
public Line(double len) { //Parameterized constructor
Console.WriteLine("Object is being created, length = {0}", len);
length = len;
}
public void setLength( double len ) {
length = len;
}
public double getLength() {
return length;
}
static void Main(string[] args) {
Line line = new Line(10.0);
Console.WriteLine("Length of line : {0}", line.getLength());
// set line length
line.setLength(6.0);
Console.WriteLine("Length of line : {0}", line.getLength());
Console.ReadKey();
}
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Object is being created, length = 10
Length of line : 10
Length of line : 6
C # Yıkıcılar
Bir destructorsınıfının bir nesnesi kapsam dışına çıktığında çalıştırılan bir sınıfın özel üye işlevidir. Birdestructor tilde (~) önekli sınıfınki ile tam olarak aynı ada sahiptir ve ne bir değer döndürebilir ne de herhangi bir parametre alabilir.
Destructor, programdan çıkmadan önce bellek kaynaklarını serbest bırakmak için çok yararlı olabilir. Yıkıcılar miras alınamaz veya aşırı yüklenemez.
Aşağıdaki örnek yıkıcı kavramını açıklıyor -
using System;
namespace LineApplication {
class Line {
private double length; // Length of a line
public Line() { // constructor
Console.WriteLine("Object is being created");
}
~Line() { //destructor
Console.WriteLine("Object is being deleted");
}
public void setLength( double len ) {
length = len;
}
public double getLength() {
return length;
}
static void Main(string[] args) {
Line line = new Line();
// set line length
line.setLength(6.0);
Console.WriteLine("Length of line : {0}", line.getLength());
}
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Object is being created
Length of line : 6
Object is being deleted
C # Sınıfının Statik Üyeleri
Sınıf üyelerini statik olarak tanımlayabiliriz. staticanahtar kelime. Bir sınıfın bir üyesini statik olarak ilan ettiğimizde, bu, sınıfın kaç nesnesi oluşturulursa oluşturulsun, statik üyenin yalnızca bir kopyası olduğu anlamına gelir.
Anahtar kelime staticBir sınıf için üyenin yalnızca bir örneğinin var olduğunu ima eder. Statik değişkenler, sabitleri tanımlamak için kullanılır, çünkü değerleri, bir örneğini oluşturmadan sınıfı çağırarak alınabilir. Statik değişkenler, üye işlevi veya sınıf tanımının dışında başlatılabilir. Ayrıca sınıf tanımının içindeki statik değişkenleri de başlatabilirsiniz.
Aşağıdaki örnek, static variables -
using System;
namespace StaticVarApplication {
class StaticVar {
public static int num;
public void count() {
num++;
}
public int getNum() {
return num;
}
}
class StaticTester {
static void Main(string[] args) {
StaticVar s1 = new StaticVar();
StaticVar s2 = new StaticVar();
s1.count();
s1.count();
s1.count();
s2.count();
s2.count();
s2.count();
Console.WriteLine("Variable num for s1: {0}", s1.getNum());
Console.WriteLine("Variable num for s2: {0}", s2.getNum());
Console.ReadKey();
}
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Variable num for s1: 6
Variable num for s2: 6
Ayrıca bir member function gibi static. Bu tür işlevler yalnızca statik değişkenlere erişebilir. Statik işlevler, nesne oluşturulmadan önce bile mevcuttur. Aşağıdaki örnek,static functions -
using System;
namespace StaticVarApplication {
class StaticVar {
public static int num;
public void count() {
num++;
}
public static int getNum() {
return num;
}
}
class StaticTester {
static void Main(string[] args) {
StaticVar s = new StaticVar();
s.count();
s.count();
s.count();
Console.WriteLine("Variable num: {0}", StaticVar.getNum());
Console.ReadKey();
}
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Variable num: 3