Это может оказаться вопросом новичка, настолько простым, насколько это невозможно, но я все равно его оставлю. Я исходил из фона JavaScript, поэтому не уверен, что в C # (и других языках ООП) есть что-то встроенное для решения этой проблемы.
Я хочу добавить вспомогательную функциональность в мой класс, используя интерфейсы и реализацию, делегированные для разделения конкретных классов, чтобы их можно было использовать повторно.
В следующей реализации я использую "LibraryClass" из внешнего API, который я не могу изменить. Я пишу «MyClass», который использует его, расширяя его.
public class LibraryClass {...}
public class MyClass : LibraryClass {...}
Теперь я хочу добавить функциональность, такую как пейджинг. Итак, что я сделал, я создал новый класс «Paging», который расширяет «LibraryClass» и расширяет «MyClass».
Текущая реализация
public class LibraryClass {...}
public class Paging : LibraryClass {
protected int pageNumber = 1;
public void setPaging(TRequest request) {
var httpReq = this.RequestContext.Get<IHttpRequest>();
pageNumber = httpReq.QueryString["page"]; // parsing syntax skipped
}
}
public class MyClass : Paging {
public override object OnGet(Products request) {
setPaging(request);
return new ProductsResponse { Products = GetAll() };
}
private List<Product> GetAll() {
// Use base.pageNumber to pull appropriate data
}
}
Может ли это быть чище с интерфейсами или любым другим механизмом C #?
Предлагаемая реализация
public class LibraryClass {...}
public interface IPaging : LibraryClass {
void setPaging(TRequest request)
}
public interface Paging : IPaging {
public void setPaging(TRequest request) {
var httpReq = this.RequestContext.Get<IHttpRequest>();
pageNumber = httpReq.QueryString["page"]; // parsing syntax skipped
}
}
public class MyClass : IPaging {...}
Я также хочу добавить в MyClass более «конкретную» функциональность, такую как реализация доступа и делегирования для другого класса.
public interface IAuth {...}
public class Auth : IAuth {...}
public class MyClass : IPaging, IAuth {...}
Ключом здесь является разделение кода.
Я мог пропустить какой-то базовый урок ООП в школе, но я думаю, он никогда не опаздывает.