gpt4 book ai didi

c# - 限制方法只能由特定类调用

转载 作者:IT王子 更新时间:2023-10-29 04:30:53 25 4
gpt4 key购买 nike

我希望一个类中的特定方法只能由特定类访问。例如:

public class A
{
public void LimitedAccess() {}
public void FullAccess() {}
}

public class B
{
public void Func()
{
A a = new A();
a.LimitedAccess(); // want to be able to call this only from class B
}
}

public class C
{
public void Func()
{
A a = new A();
a.FullAccess(); // want to be able to call this method
a.LimitedAccess(); // but want this to fail compile
}
}

是否有关键字或属性可用于强制执行此操作?

更新:

由于现有系统的复杂性和时间限制,我需要一个低影响的解决方案。我想要在编译时指示无法使用 LimitedAccess()。我相信 Jon Skeet 的回答,即我所要求的完全无法在 C# 中完成。

这个问题和 Jon 的回答对以后可能遇到这个问题的人很有帮助。而且这种设计的气味这一事实有望让任何人转而选择这样的东西作为所需的解决方案。

如评论中所述,C# friend如果您正在尝试解决类似情况,对话是很有用的读物​​。

至于我的特殊解决方案:“为什么 A 会包含 B 的逻辑”(@sysexpand 在评论中提出)。这就是问题所在。 B.Func() 在我正在处理的整个系统中被调用,但它主要在 A 的单例上运行。所以我最终做的是将 BFunc() 移动到 A 并制作 A.LimitedAccess() 私有(private)。与往常一样,还有一些其他细节需要解决,但我得到了一个低影响的解决方案,该解决方案在调用 A.LimitedAccess() 时出现编译时错误。

感谢讨论。

最佳答案

没有。您唯一可以做的就是将 LimitedAccess 设为私有(private)方法,并在类 A 中嵌套类 B

(我假设您希望所有类都在同一个程序集中。否则您可以将 AB 放在同一个程序集中,而 C 在不同的程序集中,并使 LimitedAccess 成为 internal 方法。)

关于c# - 限制方法只能由特定类调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16572901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com