Инициализация и область видимости общего абстрактного класса - PullRequest
0 голосов
/ 17 августа 2011

У меня есть следующий код

            var dataCollection;
            if (ViewBag.WageType.ToLower() == "perm")
            {
                dataCollection = ViewBag.PermWageIndex;
            }
            else if(ViewBag.WageType.ToLower() == "trial")
            {
                dataCollection = ViewBag.TrialWageIndex;
            }

Тип возврата может быть AbstractClass<Concrete1> или AbstractClass<Concrete2>.Я должен инициализировать переменную при объявлении.Но это означает, что я теряю объем, который хочу.Как я могу изменить этот код, чтобы разрешить динамические коллекции данных без зависимости от ViewBag?

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Возможно, вы сможете заставить AbstractClass<> реализовать интерфейс IAbstractClass, а затем сделать его общим типом.

Будет ли это работать или нет, зависит от того, к каким именно элементам должен получить доступ возвращаемый тип.Очевидно, что он не сможет ссылаться ни на один из членов общего типа, но в любом случае это не имеет особого смысла, поскольку я предполагаю, что потребитель в любом случае не должен знать, что такое универсальный параметр.

2 голосов
/ 17 августа 2011

Единственный способ решить эту проблему - предоставить базовый класс или интерфейс, который наследуется / реализуется Concrete1 и Concrete2, поэтому вы можете объявить dataCollection как AbstractClass<ISomething>.

Var не динамическая типизация, она разрешается во время компиляции.Поэтому вы не можете объявить переменную без присваивания (var x;), потому что компилятор не может определить тип.

Вы можете вернуться к object или dynamic, однако при этом вы потеряете безопасность типов.поэтому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...