Имеется класс Color, с перечислением цветов (фактически Enum):
public class Color { public static const RED:Color = new Color(0xFF0000);//it's OK public static const GREEN:Color = new Color(0x00FF00);//it's OK public static const RANDOM:Color = new Color(Math.random() * 0xFFFFFF);//it's OK // остальные объявления цветов private var _value:uint; public function Color(value:uint) { super(); _value = value; // какой-то код здесь } public function toString():String { return _value.toString(); } }
Необходимо написать проверку в конструкторе класса так, чтобы она выкидывала ошибку, если мы пытаемся создать еще один экземпляр класса Color:
trace(Color.RED, Color.GREEN, Color.RANDOM);//0xFF0000 0x00FF00 0xF67D53 trace(new Color(Math.random() * 0xFFFFFF));//здесь должно упасть в run-time
-код проверки можно писать только внутри конструктора класса Color;
-использовать динамику нельзя.
2 комментария
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Color.GREEN.toString());
Console.ReadKey();
Console.WriteLine(Color.RED.toString());
Console.ReadKey();
Console.WriteLine(Color.RANDOM.toString());
Console.ReadKey();
UInt32 ccc = Convert.ToUInt32(new Random().Next(0, 5000));
Console.WriteLine((new Color(ccc * 0xFFFFFF)).toString());
Console.ReadKey();
}
}
//Немного модифицировал под C#, но смысл тот же…
public class Color
{
public static Color RED = new Color(0xFF0000);
public static Color GREEN = new Color(0x00FF00);
static UInt32 ccc = Convert.ToUInt32(new Random().Next(0, 5000));
public static Color RANDOM = new Color(ccc * 0xFFFFFF);
private uint _value;
public Color(uint value)
{
if (RED == null || GREEN == null || RANDOM == null)
{
_value = value;
return;
}
uint value1 = _value;
uint red = RED._value;
uint gr = GREEN._value;
uint ran = RANDOM._value;
_value = value;
if (red == RED._value && gr == GREEN._value && ran == RANDOM._value)
{
_value = value1;
Console.WriteLine(«Warning!»);
Console.ReadKey();
}
}
public string toString()
{
return _value.ToString();
}
}
}
Хотя хватило бы:
if (RED == null || GREEN == null || RANDOM == null)
{
_value = value;
return;
}
Console.WriteLine(«Warning!»);
Console.ReadKey();