C#朋友类和OOP组合

给定包含原始数据集的类A和包含该数据的重新组织版本(GUI就绪)的类B,我想使A中的原始数据在B中可见。

显然,A类中的原始数据包含在私有成员中。 我想通过使用类似于C ++的朋友类方法的东西,使这些数据在B中可见。

我该如何处理?

谢谢。

严格地说,您无法定义可以向其公开数据的特定类(或类列表)。 但是,您可以使用internal访问修饰符而不是private修饰符,这使得成员可用于同一程序集中的任何类。

话虽这么说,你应该强烈考虑通过属性而不是字段来暴露这些成员(这就是我猜你正计划暴露的东西)。 这样做将允许类确切地定义如何将信息暴露给其他类,以及当另一个类更改数据时应该发生什么(如果有的话)。

可能这可能对你有帮助..

 public class A { public A() { } public string AccessData(object accessor) { if (accessor is B) return "private_data"; else throw new UnauthorizedAccessException(); } } public class B { public B() { } private void AccessDataFromA() { Console.WriteLine(new A().AccessData(this)); } } 

您可以在程序集中定义它们,并将A中的字段标记为“内部”。

更为OO的方法是在A中提供一组公共方法,允许访问数据(或数据的子集),通常通过简单的属性。

根据您的结构,您可以使用部分类。 这意味着数据和UI实际上都在同一个类中,但是您将它们放在不同的文件中。

如果这对您不起作用,那么您可以使用内部作用域变量作为替代方法,或者使用UI以更通用的方式表示的数据集。

旧方法(双关语)将定义简单的getvalue()setvalue()函数来返回该值,以便在不使用这些函数的情况下这些值将变得不可访问,在C#中这些函数是预定义的成员,称为属性。

 class TestMethod{ private int Secret; get { return Secret;} set { Secret = value;} } 

另一种方法是,正如其他人在我之前所说的那样,只需使用internal修饰符。