ho una classe di base "Parent" come questo:Calling "Base-Getter" in Overriding Getter della Proprietà
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Parent
{
private int parentVirtualInt = -1;
public virtual int VirtualProperty
{
get
{
return parentVirtualInt;
}
set
{
if(parentVirtualInt != value)
{
parentVirtualInt = value;
}
}
}
}
}
e una classe figlia come questo:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Child : Parent
{
public override int VirtualProperty
{
get
{
if(base.VirtualProperty > 0)
{
throw new ApplicationException("Dummy Ex");
}
return base.VirtualProperty;
}
set
{
if(base.VirtualProperty != value)
{
base.VirtualProperty = value;
}
}
}
}
}
nota che il getter in Child sta chiamando il getter di Parent (o almeno questo è ciò che intendo).
Ora utilizzo la classe "Bambino" istanziandola, assegnando un valore (diciamo 4) alla sua Proprietà Virtuale e quindi leggendo nuovamente la proprietà.
Child c = new Child();
c.VirtualProperty = 4;
Console.Out.WriteLine("Child.VirtualProperty: " + c.VirtualProperty);
Quando eseguo questo, ovviamente ottengo un ApplicationException che dice "Dummy Ex". Ma se ho impostato un punto di interruzione sulla linea
if(base.VirtualProperty > 0)
nel bambino e verificare il valore di base.VirtualProperty
(passando il mouse su di esso) prima che l'eccezione può essere lanciata (presumo (d)), Ho già ricevuto l'eccezione. Da ciò trasmetto che l'affermazione base.VirtualProperty
nel "Child-Getter chiama se stessa"; tipo.
Quello che vorrei ottenere è lo stesso comportamento che provo quando cambio la definizione di parentVirutalInt
(in Parent) per proteggere e utilizzare base.parentVirtualInt
nel Getter del bambino, invece di base.VirtualProperty
. E non vedo ancora perché questo non funzioni. Qualcuno può fare luce su questo? Sento che le proprietà sottoposte a override si comportano in modo diverso rispetto ai metodi sottoposti a override?
A proposito: sto facendo qualcosa di molto simile con la sottoclasse di una classe su cui non ho alcun controllo (questo è il motivo principale per cui la mia "soluzione" non è un'opzione).
Cordiali saluti