我还没有找到答案,所以我很好奇这样的事情是否可能。我们假设我有一个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();
}
现在,让我们说我有另外两个类,类A
和类B
,两个都被实例化一次,并且这两个类都可以访问同一个{{1 }}。但是如果我希望这两个类具有对DataClass
的不同访问权限呢?
我们想要DataClass
能够阅读A
和Data_One
,但只能设置Data_Two
,并且无法访问Data_One
,我希望课程Data_Three
能够阅读和设置B
和Data_Three
,但无法访问Data_Two
。这是否可以通过某种方式实现,如果是这样,最方便的方法是什么?
进一步阐述:在我的例子中,有2个类,但我正在寻找的是任意数量的类的通用解决方案,这允许我明确地定义每个类可以访问哪些方法,无论有多少其他类可以访问相同的方法。有点像有一个访问表'包含每个类可以访问哪些方法。我希望这是可持续发展的,因此更改可访问性权限不会有麻烦。
最栩栩如生的案例是拥有一个类,只有设置数据,其他几个,只能读取该数据,其余的则没有无论如何都可以访问它。所有这一切都不需要在类之间使用引用,instad使用“中心”和#39;数据对象。
我想出的一个想法是针对每个方法对Data_One
中的调用者进行类型检查,并确定该类型是否可以访问该方法。最理想的是,如果DataClass
会有某种DataClass
方法,则返回一个带有对可访问方法的引用的对象或容器类型,尽管这听起来有点太过分了对我来说。
答案 0 :(得分:4)
使用接口。你可以
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;
和B
到int Data_Two;
我建议你阅读有关接口和抽象类的内容。
答案 1 :(得分:1)
基本上是接口:
public class DataClass : IAInterface, IBInterface
{
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();
}
public class A
{
public void SetA(IAInterface value)
{
//can only access whats in the interface
}
}
public class B
{
public void SetB(IBInterface value)
{
//can only access whats in the interface
}
}
public interface IAInterface
{
int GetOne();
int GetTwo();
}
public interface IBInterface
{
void SetOne();
void SetTwo();
}
答案 2 :(得分:0)
在这种情况下我可以建议的一件事是将internal
用于您想要限制访问的方法和属性,并将一个类放到另一个程序集中。您也可以按照其他答案中的建议使用接口,但在这种情况下最好明确地实现它们。