我正在尝试做某事,但我不知道是否可行 我有这些类(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();
}
我对 Class1
和 Class2
做了一些小改动,以便它们可以编译,以实现 Class2
中的接口(interface)并返回Class1
中Do()
方法中的接口(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/