Kao što bi to Microsoft programeri rekli, statička klasa vam je u osnovi isto što i klasa koja nije statička ali sa tom razlikom što se statička klasa ne može instancirati. Drugim rečima, ne možete koristiti ključnu reč new za stvaranje promenjive tipa klase. Prva stvar koju treba da znate o statičkim klasama je da ih nikad ne pravite iako samo pretpostavljate da će se klasa nasleđivati. Statičke klase ne možete nasleđivati i jednostavno se podrazumeva da je svaka statička klasa i sealed klasa i bez korišćenja ključne reči sealed. Znači statičku klasu pravite samo ako ste sigurni da se nikad klasa koju pravite neće nasleđivati.
( Statički članovi štede memoriju prilikom svake inicijalizacije klase )
Statičke klase se jednostavno prave umetanjem ključne reči static ispred ključne reči class prilikom pravljenja klase, ali i svaka statična klasa mora da sadrži samo statičke članove. U Visual Basic-u se umesto static koristi ključna reč Shared i često će te čuti Visual Basic programere da statičku klasu zovu deljena klasa ili statičku metodu zovu deljena metoda, što statičke klase i jesu. Samo to nemojte da mešate sa partial klasama koje dele klasu u više fajlova. Kad kažu za statičku klase da je deljena klasa misli se na deljene memorijski resursa jer statički članovi štede memoriju. Pogledajte inicijalizaciju klase koja nije statična kroz objekat klase.
Rectangle rectangle = new Rectangle();
WriteLine(rectangle.CalculateArea(5, 7));
WriteLine(rectangle.CalculateArea(8,
9));
Rectangle rectangle = new Rectangle();
WriteLine(Rectangle.CalculateArea(5, 7));
WriteLine(Rectangle.CalculateArea(8, 9));
WriteLine(Rectangle.CalculateArea(5, 7));
WriteLine(Rectangle.CalculateArea(8, 9));
using static StaticClass.Rectangle; // StaticClass je ime
programa
WriteLine(CalculateArea(5, 7));
WriteLine(CalculateArea(8,
9));
Razumevanje
statičkog konstruktora
Kod statičkih klasa vaš konstruktor niti sme da ima parametre niti sme da bude javni što u neku ruku i ima smisla. Kad na primer napravimo promenjivu statičnom, tada istu možemo deliti u samoj klasi ali i u konstruktoru. Kao i svaki član čak i statički konstruktor koristi ključnu reč static. Konstruktor statičke klase može biti samo jedan i on se uvek implicitno poziva bez ključne reči new.
static double PI;
static Circle()
{
PI = Math.PI;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StaticClass
{
class Rectangle
{
public static int CalculateArea(int width, int height)
{
return width * height;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StaticClass
{
// static class
public static class Circle
{
// static member
static double PI;
// static
constructor must be no public and parameterless
static Circle()
{
PI = Math.PI;
}
// static method
public static double CalculateArea(double radius)
{
return PI * radius * radius;
}
}
}
using System;
using static System.Console;
using static StaticClass.Circle;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StaticClass
{
class Program
{
static void Main(string[] args)
{
WriteLine("No static class with
a static method: "
+ Environment.NewLine);
Rectangle rectangle = new
Rectangle();
WriteLine("Calculate rectangle
area for 5 and 7 meters: " + Rectangle.CalculateArea(5, 7));
WriteLine("Calculate rectangle
area for 8 and 9 meters: " + Rectangle.CalculateArea(8, 9));
WriteLine( Environment.NewLine + new String('-', 20) + Environment.NewLine);
WriteLine("Static class:" + Environment.NewLine);
WriteLine("Calculate circle area
for 5.45 radius: "
+ CalculateArea(5.45));
WriteLine("Calculate circle area
for 7.56 radius: "
+ CalculateArea(7.56));
ReadKey();
}
}
}
No static class with a static method:
Calculate rectangle area for 5 and 7 meters: 35
Calculate rectangle area for 8 and 9 meters: 72
--------------------
Static class:
Calculate circle area for 5.45 radius: 93.3131557932508
Calculate circle area for 7.56 radius: 179.55332988621
Kako to sve izgleda možete pogledati i na video-u:
( C# 6.0 Tutorial - Fundamentals - 37. Static Class, Constructor, Method and Variable )
No comments:
Post a Comment