Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Параметризация класса


Автор: Competitor 7.12.2006, 11:42
Чтобы сделать класс парметризованным я мспользую следующий код:
Код

public class StandartCreator<T> where T : new()
    {
        public override Product CreateProduct()
        {
            return new T();
        }
    }

А как будет выглядеть этот же фрагмент кода, если еще нужно, чтобы класса StandartCreator наследовался от класса Creator?

Автор: Дрон 7.12.2006, 12:16
Цитата(Competitor @  7.12.2006,  11:42 Найти цитируемый пост)
А как будет выглядеть этот же фрагмент кода, если еще нужно, чтобы класса StandartCreator наследовался от класса Creator? 


Э... А в чём проблема?
Код
public class StandartCreator<T> : Creator where T : new()
    {
        public override Product CreateProduct()
        {
            return new T();
        }
    }

Автор: Competitor 7.12.2006, 12:23
Цитата

Э... А в чём проблема?

ну ты бы хоть попробывал свой вариант сначала. Такой синтаксис не прокатывает

Автор: Дрон 7.12.2006, 12:27
Цитата(Competitor @  7.12.2006,  12:23 Найти цитируемый пост)
ну ты бы хоть попробывал свой вариант сначала.

Пробовал. Работает.

Цитата(Competitor @  7.12.2006,  12:23 Найти цитируемый пост)
Такой синтаксис не прокатывает 

Компилятор так и пишет "Error: Синтаксис не катит" ?

Автор: mr.DUDA 7.12.2006, 12:29
Код
using System;

public class Creator<T> where T : new()
{
    public virtual T CreateProduct()
    {
        return new T();
    }
}

public class StandartCreator<T> : Creator<T>
    where T : new()
{
    public override T CreateProduct()
    {
        return new T();
    }
}

class Program
{
    static void Main()
    {
        new StandartCreator<int>().CreateProduct();
    }
}

Автор: Дрон 7.12.2006, 12:47
Понял свою ошибку. Тогда уж скорее так:
Код
public class StandartCreator<T> : Creator where T : Product, new()
    {
        public override Product CreateProduct()
        {
            return new T();
        }
    }


Т.е. параметр-класс T должен быть наследником класса Product.
Но на будущее сообщения об ошибках писать всё-таки надо. Варианты "оно не работает" не принимаются.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)