ho il seguente codice:Forza classe figlia per implementare metodo privato
public abstract class NavEntityController<ChildEntity> where ChildEntity : NavObservableEntity
{
public abstract void Delete(ChildEntity line);
public abstract void Update(ChildEntity line);
public abstract void Create(ChildEntity line);
public void PushChangesToNav(NavObservableCollection<ChildEntity> lines)
{
foreach (var line in lines)
{
line.ErrorLastAction = false;
EntityState previousState = line.CurrentState;
try
{
switch (line.CurrentState)
{
case EntityState.Unchanged:
break;
case EntityState.NeedsCreate:
Create(line);
line.CurrentState = EntityState.Unchanged;
break;
case EntityState.NeedsUpdate:
Update(line);
line.CurrentState = EntityState.Unchanged;
break;
case EntityState.NeedsDelete:
Delete(line);
line.CurrentState = EntityState.Deleted;
break;
}
}
catch (Exception e)
{
//...
}
}
}
}
ho bisogno di una classe base per ereditare da questa classe, come ad esempio:
public class NavJobController : NavEntityController<NavObservableJob>
{
public NavJobController({}
public override void Delete(NavObservableJob line) {//Implementation here}
public override void Update(NavObservableJob line) {//Implementation here}
public override void Create(NavObservableJob line) {//Implementation here}
//Other functionality
}
Tuttavia, non voglio qualcuno di essere in grado di fare:
NavJobController j = new NavJobController();
j.Create(new NavObservableJob());
ma solo vorrebbe il seguente metodo:
j.PushToNav();
// e qualsiasi altra funzionalità pubblica nella classe di base per essere disponibile
In sostanza, voglio forzare la classe figlia per implementare le operazioni CRUD, senza esporli al pubblico. La sintassi ideale speravo in è il seguente:
private abstract void Delete(ChildEntity line);
private abstract void Update(ChildEntity line);
private abstract void Create(ChildEntity line);
Usa 'abstract' protetta. –