Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从属性对象访问父类属性_C# - Fatal编程技术网

C# 从属性对象访问父类属性

C# 从属性对象访问父类属性,c#,C#,假设您有以下设计: ClassA ClassC ClassB Property: object of type ClassA Property: object of type ClassC 如果ClassB有一个类型为ClassA的对象,ClassA有没有办法访问ClassB的成员?换句话说,假设有一个ClassA(比如ClassA.getvegets())的方法,但是ClassA方法需要访问ClassB类型ClassC的属性,这有可能吗?看起来你在混合两个概念: 对对象

假设您有以下设计:

ClassA

ClassC

ClassB
    Property: object of type ClassA
    Property: object of type ClassC

如果
ClassB
有一个类型为
ClassA
的对象,
ClassA
有没有办法访问
ClassB
的成员?换句话说,假设有一个
ClassA
(比如
ClassA.getvegets()
)的方法,但是
ClassA
方法需要访问
ClassB
类型
ClassC
的属性,这有可能吗?

看起来你在混合两个概念:

  • 对对象实例的引用
  • 访问对象的成员/方法/属性的权限
ClassA是否可以调用ClassB的任何方法取决于ClassA是否引用了ClassB(第一个概念)。例如,这可以通过将ClassB的实例传递给ClassA的构造函数来实现


一旦ClassA引用了ClassB的实例,它就只能访问标记为
public
的ClassB方法。查看
访问修饰符
以了解更多信息。

在不查看任何传统代码的情况下,最好的方法是将所需信息作为参数传递给
getGreens
方法

理想情况下,您应该将所有必需的数据作为参数传递,以使方法非常独立,而不依赖于某些全局状态


这是假设当前的设计是最优的;通过更改设计细节可以很好地解决这一问题,但如果没有看到更多的代码,我们就无法判断问题。

没有此设置,没有。您必须重新构造设计。是什么阻止你把它当作论点来传递?@Jeroenvanevel这不是多余的吗?我的意思是,您基本上需要调用
ClassBobj.ClassAprop_obj.getvegets(ClassBobj.ClassCprop_obj)
。是的,您必须以某种方式提供对ClassB实例的ClassA访问。void ClassA.GetVegitables(ClassB argumentName)。然后在B类中,你做PropertyA.GetVegitables(这个)@用户3175663:是的,这正是我要做的。这可能只是一个更深层次的设计缺陷,但如果没有更多的代码,我们就无法判断它。@Jeroenvanevel Perfect,我想我已经具备了我所需要的。如果你把这个写进答案里,我会把它标为答案。