繁体   English   中英

基类的抽象集合

[英]Abstract collection of base class

我正在使用MVVM框架创建WPF应用程序。

我有几个类都从基类“ MessageParentBase”继承

public class ChatMessage : MessageParentBase
{
}

public class CargoMessage : MessageParentBase
{
}

所有ViewModel都再次从基类“ ParentMessageWindowBaseViewModel”继承

public class UserControlChatViewModel : ParentMessageWindowBaseViewModel
{
}

public class UserControlCargoViewModel : ParentMessageWindowBaseViewModel
{
}

现在我要做的是在“ ParentMessageWindowBaseViewModel”类中有一个可观察的集合

abstract internal ObservableCollection<MessageParentBase> GridData
{
    get; set;
}

在那里,所以我可以在“ ParentMessageWindowBaseViewModel”级别具有通用方法,但是在子类中,我想声明一个更特定的集合

internal override ObservableCollection<ChatMessage > GridData
{
    get { return _GridData; }
    set
    {
        _GridData = value;
    }
}

Visual Studio告诉我必须将其声明为“ MessageParentBase”类型。

有人可以向我解释一下我目前正在挣扎中如何实现这一目标。

非常感谢您的帮助。

ObservableCollection <ChatMessage>ObservableCollection <MessageParentBase>不同,因此您无法覆盖它。

您可以这样使用:

public class MessageParentBase
{
}

public class ChatMessage : MessageParentBase
{
}

public abstract class ParentMessageWindowBaseViewModel<T> where T : MessageParentBase
{
    abstract internal ObservableCollection<T> GridData
    {
        get;
        set;
    }
}

public class Child : ParentMessageWindowBaseViewModel<ChatMessage>
{

    internal override ObservableCollection<ChatMessage> GridData
    {
        get;
        set;
    }
}

但是不可能将所有Childs都存储在1个列表中。 因此,它不会解决继承通用属性的问题。

在您将GridData 属性声明为abstract ,为什么还要在其中引入后备字段 _GridData 不要那样做

如果希望该属性为abstract ,则不要在其中放置任何支持字段。 如果要在“高级”级别(基类)实现属性,请从其中删除abstract修饰符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM