Кратко съдържание


Преобразуване на типовете



страница18/73
Дата21.07.2018
Размер9.03 Mb.
#76887
1   ...   14   15   16   17   18   19   20   21   ...   73

Преобразуване на типовете


Има два типа преобразувания на примитивните типове – преобразуване по подразбиране (implicit conversion) и изрично преобразуване (explicit conversion).

В C# преобразуването по подразбиране е позволено, когато е безопасно. Например, от int към long, от float към double, от byte към short:



short a = 10;

int b = a; // implicit type conversion from short to int



Изричното преобразуване се използва, когато преобразуваме към по-малък тип или типовете не са директно съвместими. Например, от long към int, от double към float, от char към short, от int към char, от sbyte към uint:

int a = 10;

short b = (short) a; // explicit type conversion



В С# има специална ключова дума checked, която указва при препълване да се получава System.OverflowException вместо грешен резултат. Клю­човата дума unchecked действа противоположна на checked. Ето пример за преобразуване на типове с използване на тези ключови думи:

byte b8 = 255;

short sh16 = b8; // implicit conversion

int i32 = sh16; // implicit conversion

float f = i32; // implicit - possible loss of precision!

double d = f; // implicit conversion

checked


{

byte byte8 = (byte) sh16; // explicit conversion

// OverflowException is possible!

ushort ush16 = (ushort) sh16; // explicit conversion

// OverflowException is possible if sh16 is negative!

}

unchecked



{

uint ui32 = 1234567890;

sbyte sb8 = (sbyte) ui32; // explicit conversion

// OverflowException is not thrown in unchecked mode

}

Изброени типове (enumerations)


Изброените типове в C# се състоят от множество именувани константи. Дефинират се със запазената дума enum и наследяват типа System.Enum. Ето пример за изброен тип, който съответства на дните от седмицата:

public enum Days

{

Saturday,



Sunday,

Monday,


Tuesday,

Wednesday,

Thursday,

Friday


};

Изброените типове се използват за задаване на една измежду няколко възможности. Вътрешно се представят с int, но може да се зададе и друг числов тип.

Изброените типове са силно типизирани – те не се превръщат в int, освен експлицитно.

Ето пример как може да бъде използван даден изброен тип:

Days today = Days.Friday;

if (today == Days.Friday)

{

Console.WriteLine("Днес е петък.");



}

Както се вижда, инстанциите на изброените типове могат да приемат една от дефинираните в тях стойности.

Изброените типове могат да се използват и като съвкупност от битови флагове чрез атрибута [Flags]. Ето пример за изброен тип, който може да приема за стойност комбинация от дефинираните в него константи:



[Flags]

public enum FileAccess

{

Read = 1,



Write = 2,

Execute = 4,

ReadWrite = Read | Write

}
// ...


Console.WriteLine(

FileAccess.ReadWrite | FileAccess.Execute);


// The result is: "ReadWrite, Execute"

Какво представляват атрибутите и как се използват ще разгледаме по-детайлно в темата "Атрибути". Засега трябва да знаем, че чрез тях може да се асоциира допълнителна информация към типовете.

Използването на изброени типове осигурява по-високо ниво на абстрак­ция и по този начин сорс кодът става по-разбираем и по-лесен за под­дръжка.

В .NET Framework широко се използват изброени типове. Например, из­броения тип ConnectionState, намиращ се в пространство от имена System.Data, характеризира състоянието на връзка към база от данни, създадена чрез ADO.NET (зададено е и числовото съответствие на всяко едно от състоянията):

public enum ConnectionState

{

Closed = 0,



Open = 1,

Connecting = 2,

Executing = 4,

Fetching = 8,

Broken = 16

}

Идентификатори


Идентификаторите в С# се състоят от последователности от букви, цифри и знак за подчертаване като винаги започват с буква или знак за подчер­таване. В тях малките и главните букви се различават. Иденти­фикаторите могат да съдържат Unicode символи, например:

int алабала_портокала = 42;

bool \u1027\u11af = true;



Microsoft препоръчва се следната конвенция за именуване:

  • PascalCase – за имена на класове, пространства от имена, структури, типове, методи, свойства, константи

  • camelCase – за имена на променливи и параметри

Въпреки, че е възможно, не се препоръчва да се използват идентифика­тори на кирилица или друга азбука, различна от латинската.

Декларации


Декларациите на променливи в C# могат да са няколко вида (почти като в C++, Java и Delphi) – локални променливи (за даден блок), член-промен­ливи на типа и константи. Ето пример:

int count;

string message;



Член-променливите могат да имат модификатори, например:

public static int mCounter;

Константи


Константите в С# биват два вида – константи, които приемат стойността си по време на компилация (compile-time константи) и такива, които получават стойност по време на изпълнение на програмата (runtime константи).

Compile-time константи


Compile-time константите се декларират със запазената дума const. Те задължително се инициализират в момента на декларирането им и не могат да се променят след това. Те реално не съществуват като промен­ливи в програмата. По време на компилация се заместват със стойността им. Например:

public const double PI = 3.1415926535897932;

const string COMPANY_NAME = "Менте Софт";


Runtime константи


Runtime константите се декларират като полета с модификатора readonly. Представляват полета на типа, които са само за четене. Инициализират се по време на изпълнение (в момента на деклариране или в конструктора на типа) и не могат да се променят след като веднъж са инициализирани. Например:

public readonly DateTime NOW = DateTime.Now;



Сподели с приятели:
1   ...   14   15   16   17   18   19   20   21   ...   73




©obuch.info 2024
отнасят до администрацията

    Начална страница