C# 应用程序类中的访问对象

C# 应用程序类中的访问对象,c#,wpf,C#,Wpf,我正在WPF中开发一个个人理财应用程序。我有我的主窗口,它显然可以处理渲染。我的问题是,如何优雅地访问App类中的对象?我的结构设置如下: class Application { } class App : Application { private AccountManager accountManager; // HOW DO I ELEGANTLY ACCESS THIS IN MAINWINDOW?

我正在WPF中开发一个个人理财应用程序。我有我的主窗口,它显然可以处理渲染。我的问题是,如何优雅地访问App类中的对象?我的结构设置如下:

class Application { }

class App : Application {
  private AccountManager accountManager;  // HOW DO I ELEGANTLY ACCESS THIS IN MAINWINDOW?  
                                          // USE SINGLETON PATTERN?
}

class MainWindow { }

class AccountManager {
  List<Account> accounts = new List<Account>();
}

static class AccountFactory {
  static Account CreateFactory(string Account);
}

class Account { }
class Asset : Account { }
class Equity : Account { }
class Expense : Account { }
class Income : Account { }
class Liability : Account { }
类应用程序{}
类应用程序:应用程序{
private AccountManager;//我如何在主窗口中优雅地访问它?
//使用单例模式?
}
类主窗口{}
班级会计经理{
列表帐户=新列表();
}
静态类AccountFactory{
静态帐户CreateFactory(字符串帐户);
}
类帐户{}
类别资产:帐户{}
类别权益:账户{}
课程费用:科目{}
类别收入:账户{}
类别负债:账户{}

如果要从另一个类访问一个类的成员,请将该成员
设置为公共成员。请记住,公共字段通常不是好主意,因此请使用公共属性:

public AccountManager accountManager { get; private set; }
setter是私有的,因此对于
MainWindow
类,该属性将是只读的。
感谢@HighCore提供的可读性提示。

删除所有“工厂”内容。C#不是java。你不需要数百万无用的抽象概念。保持简单。你能详细说明工厂设计模式是如何严格地用Java而不是C#实现的吗?@keelerjr12工厂设计模式是必要的吗?这里提供的代码片段没有显示这种模式的本质。@keelerjr12基本上,java很差劲,是一个迟钝的毫无价值的恐龙,而C#是一种设计合理的现代语言。也就是说,只要将string参数放入account类的构造函数中,如果有的话。或者使用对象初始值设定项而不使用构造函数。这是最好的方法吗?我通常属于“getter&setter”这类糟糕的设计。@keelerjr12没有人能说“这是……的最佳方式”。这要看情况而定。我相信在这种情况下,与私人设定者使用财产没有什么错。好的方面是结果代码的简单性。为了爱一切美好的事物,把获得者放在第一位。你的密码让我想杀小猫
{get;private set;}
@HighCore只是好奇difference@MadSorcerer不同之处在于,在整个人类历史中,所有的C#代码都是先有getter的,因此人们的大脑希望它是这样的,这意味着快速阅读代码时,我会解释
{private get;set;}