繁体   English   中英

如何隐藏 class 之外的方法

[英]How to hide methods outside the 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();

如评论中所述,发布的代码中有很多错误。 为了示例答案,我将所有麻烦的地方都公开了。 因此,虽然这将编译,但仍需谨慎对待,并适当调整您的可访问性修饰符。

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

public interface IClass2Helper
{
    void Fill();
}

我对Class1Class2进行了一些小的更改,以便它们变得可编译,以实现Class2中的接口并返回Class1中的Do()方法中的接口:

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(); 
    }
}  

代码的小提琴:
https://dotnetfiddle.net/5EPPfO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM