[英]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.