Присвоение экземпляра интерфейса классу, который реализует этот интерфейс - PullRequest
0 голосов
/ 04 февраля 2010

У меня есть различные классы, которые реализуют IActiveRecord.

Я хочу иметь метод, в котором я передаю недавно созданный класс и присваиваю ActiveRecord тип передаваемого класса.

Я пробовал ниже, но по какой-то причине он не компилируется.

Есть идеи?

private void AddRecord<T>() where T : class, new()
        {

            IActiveRecord ActiveRecord = (IActiveRecord)T;
        }

Ответы [ 4 ]

4 голосов
/ 04 февраля 2010

Ваш вопрос неясен, но если я правильно понимаю, что вы пытаетесь сделать, вам просто нужно добавить ограничение where T : IActiveRecord. Тогда вы можете сказать

void AddRecord<T>() where T : IActiveRecord, new() { 
    IActiveRecord activeRecord = new T();
    // more stuff
}

Относительно вашей линии

IActiveRecord ActiveRecord = (IActiveRecord)T;

это не законно. T - это параметр типа, а не выражение, которое вы можете привести.

2 голосов
/ 04 февраля 2010

Похоже, что вы хотите ограничить универсальный тип типом IActiveRecord, тогда вам не нужно приведение:

private void AddRecord<T>() where T : IActiveRecord, new()
{
    IActiveRecord a = new T();
}
2 голосов
/ 04 февраля 2010

В методе, который вы отображаете, вы не передаете экземпляр определенного типа? Я не очень понимаю, чего вы пытаетесь достичь.

Вы хотите сделать это:

private void AddRecord<T>() where T : IActiveRecord, new()
{
    IActiveRecord a = new T();
}

0 голосов
/ 04 февраля 2010

Я думаю, что вы хотите ограничить свой метод с помощью следующего:

private void AddRecord<T>() where T : IActiveRecord, new()

В противном случае ваш вопрос может быть мне неясен.

...