gpt4 book ai didi

c# - 在 C# 中创建受限方法/字段

转载 作者:行者123 更新时间:2023-12-02 22:08:21 27 4
gpt4 key购买 nike

这个问题与这个问题类似: Restrict method access to a specific class in C++

但是,我的问题是针对 C# 的。

重申一下:我有两个类,例如 FooBar,它们紧密耦合。 Foo 公开了一个我只希望 Bar 能够访问的方法。

我有点知道我想要什么,但不知道如何实际去做,或者不知道是否存在更简单的方法。它将涉及使用某种依赖于使用 (new StackFrame(1)).GetMethod().DeclaringType 的属性来拒绝访问。用法看起来像这样:

public class Foo {

[RestrictedUsage(Allow=typeof(Bar))]
public int SomeMethod()
{
// do something
}

}

我可能缺少该问题的相关细节(我是新来的) - 我一定会随时更新。

更新:我应该提到 Foo 包装了一个现有的 UIElement 我正在尝试修改其行为。由于类是密封的,所以很难正常修改。 Bar 是将值转换为正确值的类。 Bar 是非 UI 的,在我的应用程序中的其他地方使用。 Foo 不知道如何转换值(它很复杂 - 这就是 Bar 的用途),这就是为什么我不能只包装基本方法。

Jon Skeet 给出了我期待的答案 - 更改类的布局(到目前为止,这一切都归功于他),但我认为这两个答案都不适用(好的答案只是不相关)。

我已经在代码中犯了错误,引用了错误的属性...

最佳答案

两个选项:

  • 将 Foo 和 Bar 放在单独的程序集中,并将 Foo 的方法设为内部方法
  • 使 Bar 成为 Foo 中的嵌套类,并将方法设为私有(private)

如果将 Bar 设为嵌套类合理的话,后者通常是更实用的选择。

如果这些都不起作用,我认为您最好只使用内部方法并记录它 - 您对程序集中的其余代码有多不信任?

关于c# - 在 C# 中创建受限方法/字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2271317/

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