C# и хитрый вариант с дженериком для метода - как сделать?
От: senglory  
Дата: 12.05.22 20:47
Оценка:
public class Request<K>
{
    public K Id;
}

public class Response<T>
{
    public T Data;
}

public class MyDto
{
}


public abstract class BaseStorage
{
    public virtual Response<T> GetDemo<T, K>(Request<K> request)
    {
    }
}


public class ChildStorage : BaseStorage
{
    public override Response<MyDto> GetDemo<MyDto, int>(Request<int> request)
    {
        return new Response<MyDto>();
    }
}


ВОт как мне правильно определить метод, отрисованный болдом? Сейчас в .NET 6 компилер на заголовок метода ругается и не переваривает его.
c# generic method
Re: C# и хитрый вариант с дженериком для метода - как сделать?
От: ltc  
Дата: 12.05.22 21:09
Оценка: 86 (2) +1
Здравствуйте, senglory, Вы писали:

S>ВОт как мне правильно определить метод, отрисованный болдом? Сейчас в .NET 6 компилер на заголовок метода ругается и не переваривает его.


    public abstract class BaseStorage<T, K>
    {
        public virtual Response<T> GetDemo(Request<K> request)
        {
            throw new NotImplementedException();
        }
    }


    public class ChildStorage : BaseStorage<MyDto, int>
    {
        public override Response<MyDto> GetDemo(Request<int> request)
        {
            return new Response<MyDto>();
        }
    }
Re: C# и хитрый вариант с дженериком для метода - как сделат
От: samius Япония http://sams-tricks.blogspot.com
Дата: 13.05.22 03:35
Оценка: 40 (1)
Здравствуйте, senglory, Вы писали:

S>ВОт как мне правильно определить метод, отрисованный болдом? Сейчас в .NET 6 компилер на заголовок метода ругается и не переваривает его.

Нельзя переопределить метод, определенный с generic параметрами, используя лишь частные значения параметра. Даже c where не получится. Сигнатура должна быть в точности такой же, как и у virtual метода. Имена параметров отличаться могут, типы — нет.
Отредактировано 13.05.2022 3:35 samius . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.