将一个类的方法组合在一起

时间:2011-08-08 01:23:22

标签: c#

我无法找到我要找的东西,也不熟悉C#的许多功能。基本上我有一个有很多方法的类,其中很多都属于类似的操作。我正在编写一种API,并希望最终用户能够通过按目的对它们进行分组来访问这些方法。

所以我的类有很多成员都访问相同的数据,我们称之为ParentClass,我想调用ParentClass.ZoomFunctions.ZoomIn(),其中放大父类中访问的数据(并且最好是那个班。)

我不知道如何使用继承,但我无法简单地找到如何做到这一点。

3 个答案:

答案 0 :(得分:3)

嗯...

在不了解您的代码的情况下,听起来您的课程正在尝试做太多。也许您应该考虑将API分解为多个类,而不是尝试在类中对方法进行分组。

考虑阅读Single Responsibility PrincipleSeparation 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();
    }
}