这可能会成为新手问题,尽可能简单,但无论如何我都会放弃。我来自JavaScript背景,所以不确定C#(和其他OOP语言)是否有内置任何东西来解决这个问题。
我想使用接口和放大器为我的类添加辅助功能。实现委托分离具体类,以便可以重用它们。
在以下实现中,我使用外部API的“LibraryClass”,我无法修改。我正在编写“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添加更多“具体”功能,例如access&amp;将实现委托给另一个类。
public interface IAuth {...}
public class Auth : IAuth {...}
public class MyClass : IPaging, IAuth {...}
这里的关键是代码分离。
我可能在学校里错过了一些基本的OOP课程,但我猜它从来都没用过。
答案 0 :(得分:1)
我想知道你要找的是对象组合,以便某些对象由具有特定功能的较小对象组成 - 请参阅http://en.wikipedia.org/wiki/Object_composition
然后使用Dependency Injection使这很简单。 Which .NET Dependency Injection frameworks are worth looking into?
更多阅读
答案 1 :(得分:0)
如果您不需要LibraryClass
的所有功能,则只需创建wrapper即可。 Encapsulate它在一个类中,只展示你想要的东西。
public class LibraryClassWrapper
{
private LibraryClass _libraryClass = new LibraryClass();
public void MyFoo()
{
// do something... then call a method in the LibraryClass (if required)
_libraryClass.Foo();
}
}
然后,您可以在其他界面中分离其他功能,并从中继承您的MyClass
对象。
public interface IAuth {...}
public interface IPaging {...}
public class MyClass : LibraryClassWrapper, IPaging, IAuth {...}
请记住,您不能从接口中的具体类继承。 C#仅支持多接口继承。类只能从一个具体类和多个接口继承。