Загадка#7

Имеется класс 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 комментария

  • 18.08.2015 - 10:53 | Permalink

    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();
    }
    }

    }

  • 18.08.2015 - 11:54 | Permalink

    Хотя хватило бы:
    if (RED == null || GREEN == null || RANDOM == null)
    {
    _value = value;
    return;
    }
    Console.WriteLine(«Warning!»);
    Console.ReadKey();

  • Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *