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