Да си припомним: какво са класовете и обектите?



страница52/84
Дата03.01.2022
Размер0.54 Mb.
#112941
ТипПрограма
1   ...   48   49   50   51   52   53   54   55   ...   84
Класове
Свързани:
Изпитна тема1, Изпитна тема2
Color.cs

class Color

{

private int red;



private int green;

private int blue;

 

public Color(int red, int green, int blue)



{

this.red = red;

this.green = green;

this.blue = blue;

}

}


Тъй като някои цветове се използват по-често от други (например черно и бяло) можем да декларираме константи за тях, с идеята потребители­те на нашия клас да ги използват наготово вместо всеки път да създават свои собствени обекти за въпросните цветове. За целта модифицираме кода на нашия клас по следния начин, добавяйки декларацията на съответните цветове-константи:

Color.cs

class Color

{

public const Color Black = new Color(0, 0, 0);



public const Color White = new Color(255, 255, 255);

 

private int red;



private int green;

private int blue;

 

public Color(int red, int green, int blue)



{

this.red = red;

this.green = green;

this.blue = blue;

}

}


Странно, но при опит за компилация, получаваме следната грешка:

'Color.Black' is of type 'Color'. A const field of a reference type other than string can only be initialized with null.

'Color.White' is of type 'Color'. A const field of a reference type other than string can only be initialized with null.



Това е така, тъй като в С#, константи, декларирани с модификатор const, могат да бъдат само от следните типове:

1.  Примитивни типове: sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool.

2.  Изброени типове (разгледани в секция "Изброени типове (enumerations)" в края на тази глава).

3.  Референтни типове (най-вече типът string).

Проблемът при компилацията на класа в нашия пример е свързан с референтните типове и с ограничението на компилатора да не позволява едновременната употреба на оператора new при деклариране на константа, когато тази константа е декларирана с модификатора const, освен ако референтният тип не може да се изчисли по време на компилация.

Както се досещаме, единственият референтен тип, който може да бъде изчислен по време на компилация при употребата на оператора new е string.

Следователно, единствените възможности за константи от референтен тип, които са декларирани с модификатор const, са следните:

1.  Константите трябва да са от тип string.

2.  Стойността, която присвояваме на константата от референтен тип, различен от string, е null.

Можем да формулираме следната дефиниция:





Константите декларирани с модификатор const трябва да са от примитивен, изброен или референтен тип като ако са от референтен тип, то този тип трябва да е или string или стойността, която се присвоява на константата трябва да бъде null.

Следователно, използвайки модификатора const няма да успеем да декларираме константите Black и White от тип Color в нашия клас за цвят, тъй като те не са null. Как да решим този проблем, ще видим в следващата подсек­ция.



Сподели с приятели:
1   ...   48   49   50   51   52   53   54   55   ...   84




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

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