我无法找到我要找的东西,也不熟悉C#的许多功能。基本上我有一个有很多方法的类,其中很多都属于类似的操作。我正在编写一种API,并希望最终用户能够通过按目的对它们进行分组来访问这些方法。
所以我的类有很多成员都访问相同的数据,我们称之为ParentClass,我想调用ParentClass.ZoomFunctions.ZoomIn(),其中放大父类中访问的数据(并且最好是那个班。)
我不知道如何使用继承,但我无法简单地找到如何做到这一点。
答案 0 :(得分:3)
嗯...
在不了解您的代码的情况下,听起来您的课程正在尝试做太多。也许您应该考虑将API分解为多个类,而不是尝试在类中对方法进行分组。
考虑阅读Single Responsibility Principle
和Separation of Concerns
,了解如何改进课堂设计。
答案 1 :(得分:1)
听起来你应该创建一个将方法组合在一起的接口,然后创建一个以接口为类型的公共属性。
例如:
interface IZoomFunctions
{
public void ZoomIn();
...
}
class ParentClass : IZoomFunctions
{
public IZoomFunctions ZoomFunctions { get; }
}
答案 2 :(得分:0)
如果您想确保您的用户仅通过您定义的路径访问这些功能(即他们必须调用ParentClass.ZoomFunctions.ZoomIn()并且不应该被允许直接调用ParentClass.ZoomIn()),并且如果你想把所有的东西放在一个班级里,而不是创建不同的班级,你可以:
为每组方法定义一个接口,就像JohnD建议的那样:
public interface IZoomFunctions
{
public void ZoomIn();
//...
}
向您的父类添加一个属性,该属性返回类本身强制转换为您的接口:
public IZoomFunctions ZoomFunctions
{
get { return this as IZoomFunctions; }
}
然后让你的类显式实现接口并将原始方法设为私有(以避免直接访问):
class ParentClass : IZoomFunctions
{
// your stuff
public IZoomFunctions ZoomFunctions
{
get { return this as IZoomFunctions; }
}
private void ZoomIn()
{
// your real code here
}
public void IZoomFunctions.ZoomIn()
{
this.ZoomIn();
}
}