C # override base class collection type
I have a base class with
public abstract class BaseClass
{
ICollection<int> Numbers {get;set;}
}
Is there a way to get the result below?
public abstract class SubClass : BaseClass
{
override ObservableCollection<int> Numbers {get;set;}
}
So, does the subclass have an observable collective, or is there a design pattern I could implement?
+3
Jack
source
to share
3 answers
Generics can help you achieve similar behavior:
public abstract class BaseClass<T> where T : ICollection<int>
{
public T Numbers { get; set; }
}
public abstract class SubClass : BaseClass<ObservableCollection<int>>
{
}
+6
Darjan Bogdan
source
to share
You cannot override it.
One solution might be to create a new property with a different name:
public abstract class SubClass : BaseClass
{
public ObservableCollection<int> ObservableNumbers => (ObservableCollection<int>)Numbers;
}
Or as follows: (if you really need to install it)
public abstract class SubClass : BaseClass
{
public ObservableCollection<int> ObservableNumbers
{
get { return (ObservableCollection<int>)Numbers; }
set { Numbers = value; }
}
}
And don't forget to make the property Numbers
public or internal!
0
PJvG
source
to share
You can try as below by adding the keyword "new"
public abstract class BaseClass
{
public virtual ICollection<int> Numbers { get; set; }
}
public abstract class SubClass : BaseClass
{
public new ObservableCollection<int> Numbers { get; set; }
}
0
Ashish sapkale
source
to share