c# - 如何隐藏类外的方法

标签 c#

我正在尝试做某事,但我不知道是否可行 我有这些类(class):

public Class1
{
    private Class2 class2;

    public Class1
    {
        this.class2 = new Class2();
    }

    public Class2 Do()
    {
        return class2.Build();
    }
}

internal Class2
{
    public internal Class2 Build()
    {
        return this;
    }

    public void Fill()
    {
    }
}

var class1 = new Class1();
class1.Do().Fill();

当用户键入 class1.Do() 时,我想要它。只有 Fill() 方法是可访问的。我该怎么做?

目标是防止 class1.Do().Build();

最佳答案

如评论中所述,发布的代码中有不少错误。为了示例答案,我将所有麻烦的地方都公开了。因此,虽然这会编译,但要对它持保留态度,并适本地调整您的可访问性修饰符。

首先,我创建了一个新接口(interface)来只公开 Fill,而不公开 Build:

public interface IClass2Helper
{
    void Fill();
}

我对 Class1Class2 做了一些小改动,以便它们可以编译,以实现 Class2 中的接口(interface)并返回Class1Do() 方法中的接口(interface):

public class Class1
{
    private Class2 class2;

    public Class1()
    {
        this.class2 = new Class2();
    }

    public IClass2Helper Do()
    {
        return class2.Build();
    }
}

public class Class2 : IClass2Helper
{
    public Class2 Build()
    {
        return this;
    }

    public void Fill() { }
}  

并添加了一个简单的测试类/方法来验证:

class TestProgram
{
    static void Main()
    {
        var class1 = new Class1();
        class1.Do().Fill(); //This line is OK

        //The below line will have an error since the interface doesn't expose a Build method
        class1.Do().Build(); 
    }
}  

代码的 fiddle :
https://dotnetfiddle.net/5EPPfO

关于c# - 如何隐藏类外的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62432423/

相关文章:

c# - .NET DLL/EXE PE 是否符合要求?

c# - 平假名到汉字转换器

c# - SCGI 脚本引擎服务器? (C#、Java、PHP)

c# - 使用 Entity Framework Code First 版本 5 中的 SQL View

c# - 如何定位组件间引用的 DLL

c# - WPF 跟踪器多值

c# - 为什么 StringBuilder 比字符串连接慢?

c# - ZeroMQ 服务器/客户端类型的正确模式

c# - DiffPlex 在比较两个 html 代码时不会忽略 html 标签

c# - 服务在没有 OnStop() 的情况下停止