gpt4 book ai didi

c# - 有没有办法控制哪些类可以访问类中的某些方法?

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:59 25 4
gpt4 key购买 nike

我还没有真正找到答案,所以我很好奇这样的事情是否可能。假设我有一个 DataClass它保存着程序的各种数据。像这样的东西,例如:

public class DataClass
{
int Data_One;
int Data_Two;
int Data_Three;

public int GetOne();
public int GetTwo();
public int GetThree();

public void SetOne();
public void SetTwo();
public void SetThree();
}

现在,假设我还有另外两个类(class),类(class)A和类 B , 两者都被实例化一次,并且两个实例都可以访问 DataClass 的同一个实例.但是,如果我希望这两个类对 DataClass 具有不同类型的访问权限怎么办? ? 假设我想要 A能够阅读 Data_One , 和 Data_Two , 但只设置 Data_One , 并且无权访问 Data_Three ,而我想要类 B能够读取和设置 Data_ThreeData_Two , 但无权访问 Data_One .这可以通过某种方式实现吗?如果可以,最方便的方式是什么?

进一步详细说明:在我的示例中,有 2 个类,但我正在寻找的是适用于任意数量类的通用解决方案,它允许我明确定义每个类可以访问哪些方法,而不管有多少其他类可以访问相同的方法。有点像有一个“访问表”,其中包含每个类可以访问哪些方法。我希望这是可维护的,因此更改可访问性权限不会很麻烦。

最真实的情况是有一个类,专门设置数据,其他一些类,可能只读取数据,其余的没有访问它。所有这一切都无需在类之间使用引用,而是使用“中央”数据对象。

我想到的一个想法是对 DataClass 中的调用者进行类型检查对于每个方法,并确定该类型是否可以访问该方法。最理想的情况是,如果 DataClass会有某种 Access方法,它返回一个对象或容器类型,并引用可访问的方法,尽管这对我来说听起来太过分了。

最佳答案

使用接口(interface)。你可以拥有

interface ICanBeUsedOnlyByA {
int Data_One { get; set; }
}
interface ICanBeUsedOnlyByB {
int Data_Two { get; set; }
}

class DataClass : ICanBeUsedOnlyByA, ICanBeUsedOnlyByB {

}

然后你有

class A {
public ICanBeUsedOnlyByA A { get; set; }

public A (ICanBeUsedOnlyByA a){
A = a;
}
}

class B {
public ICanBeUsedOnlyByA B { get; set; }

public B (ICanBeUsedOnlyByB b){
B = b;
}
}

然后 A 将只能访问 int Data_One;Bint Data_Two;我建议您阅读有关接口(interface)和抽象类的内容。

关于c# - 有没有办法控制哪些类可以访问类中的某些方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40611962/

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