【问题标题】:Class Instance creation between 3 classes in C#C#中3个类之间的类实例创建
【发布时间】:2013-08-10 17:04:19
【问题描述】:

我有三个类,我们称它们为 A、B 和 C。现在考虑以下代码:

public class A{
  A(){}
  methodOfA(){}
}

public class B{
  A a = new A();
}

public class C{
  //Here i want to access a.methodOfA() without creating a new instance of the class A.
  //I want to achieve this only using the instance 'a' created in class B
}

这可能吗?如果没有,请告诉我解决方案。我的应用程序限制我在 C 类中创建 A 的新实例。这是因为我正在使用 WPF 在 C# 中构建音乐播放器应用程序。

B 类是我的 mainwindow.cs,它会一直运行直到应用退出。 A 类包含所有方法,如 play()、pause() 等。 B 类调用 C 类中的一个方法(在按钮单击事件上),该方法又必须使用在 B 中创建的相同实例调用 A 类中的 play() 之类的方法,因为该实例已经在运行并且该函数必须基于执行在那个实例上。

我已经在C类中继承了外部库。而C#不支持多重继承。

【问题讨论】:

  • methodOFA 公开吗?
  • 提供一个将A类的实例封装在B中的属性。public class B { A a = new A(); public A GetA { get { return a }; }
  • 我认为多重继承没有任何帮助 - 如果你有一个例子 - 请发布它,否则感觉就像空洞的咆哮......
  • 了解C 中方法的返回类型也会有所帮助,因为如果它是可变的,那么您可能永远不需要在 C 中调用 A..
  • 这就是我的意思,如果它返回一个布尔值,那么您可以使用该返回值您的方法返回到 B 之后,然后让 B 在 A 中调用它需要的方法

标签: c# wpf class oop multiple-inheritance


【解决方案1】:

如果您有三个单独的类,大概是这样,每个类都在您的对象模型中履行不同的职责。

如果您需要直接从 C 访问 A,鉴于当前的设计,您的对象模型可能存在缺陷。

您可以通过让 B 代表 B 的使用者在 A 中调用该功能的责任来解决直接问题。为此,请在 B 中创建一个包装器方法,该方法调用 A 上的适当方法。

您提到 C# 不支持多重继承。确实如此,但它确实允许您在单个类中实现多个接口。这可能是一个合适的选择,具体取决于您实际问题的具体细节。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2022-12-22
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    相关资源
    最近更新 更多