Унаследованный объект объекта не распознается как объект? - PullRequest
1 голос
/ 12 февраля 2011

Я пытаюсь создать общий типизированный класс, но столкнулся с проблемой.Вот мое базовое определение класса:

public class QueueObject<T> where T : System.ServiceModel.DomainServices.Client.Entity
{
    public string LoadingMessage { get; set; }
    public System.ServiceModel.DomainServices.Client.EntityQuery<T> Query { get; set; }
}

Я пытаюсь добавить экземпляры этого класса в очередь

private Queue<QueueObject<Entity>> _queue;
this._queue.Enqueue(new QueueObject<MyEntity> {Query = MyContext.GetMyEntitiesQuery(), LoadingMessage = "Loading some stuff"});

Это не работает.Я получаю сообщение о том, что QueueObject не может быть преобразован в QueueObject.Я не понимаю, потому что MyEntity наследует от Entity.Я делаю что-то не так?

Вот тот же код в VB, если это помогает:

Public Class QueueObject(Of T As System.ServiceModel.DomainServices.Client.Entity)
    Public Property LoadingMessage As String
    Public Property Query As System.ServiceModel.DomainServices.Client.EntityQuery(Of T)
End Class

Private _queue As Queue(QueueObject(Of Entity))
Me._queue.Enqueue(New QueueObject(Of MyEntity) With {.Query = MyContext.GetMyEntitiesQuery(), .LoadingMessage = "Loading some stuff..."})

Ответы [ 2 ]

0 голосов
/ 13 февраля 2012

Все еще не уверен в причине первоначальной ошибки, но возможное решение состояло в том, чтобы заставить каждый объект реализовать интерфейс. Затем сделайте QueueObject этого типа интерфейса.

Я закончил тем, что пошел другим путем, так что это оказалось неуместным.

0 голосов
/ 12 февраля 2011

Проблема в том, что вы объявили очередь как Queue<Entity>. Я думаю, что вы хотите:

Queue<QueueObject<MyEntity>> _queue;

Это определенно решит вашу проблему с компиляцией. Однако это не поможет вам «обобщить» вашу очередь, чтобы она содержала объекты QueueObject, которые содержат сущности любого другого типа. Чтобы это исправить, потребуются изменения вплоть до GetMyEntitiesQuery(), чтобы вместо этого вернуть базовый EntityQuery ...

Где это возможно, я бы определил, какая часть вам не нужна, и начинаю с этого. То есть, где вы можете просто позволить полиморфизму творить чудеса. Например, имеет ли значение, что EntityQuery в QueueObject строго типизирован?

...