Tôi có đoạn mã sau:Force lớp trẻ để thực hiện phương pháp riêng
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)
{
//...
}
}
}
}
Tôi cần một lớp cơ sở kế thừa từ lớp này, như ví dụ:
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
}
Tuy nhiên, tôi không muốn một người nào đó để có thể làm:
NavJobController j = new NavJobController();
j.Create(new NavObservableJob());
nhưng chỉ muốn các phương pháp sau đây:
j.PushToNav();
// và bất kỳ chức năng công cộng nào khác trong lớp cơ sở có sẵn
Về cơ bản, tôi muốn buộc trẻ thực hiện các hoạt động CRUD mà không để lộ chúng ra công chúng. Cú pháp lý tưởng Tôi đã hy vọng là những điều sau đây:
private abstract void Delete(ChildEntity line);
private abstract void Update(ChildEntity line);
private abstract void Create(ChildEntity line);
Sử dụng 'abstract' bảo vệ. –