Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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#_Class - Fatal编程技术网

C# 从类调用方法和变量的最佳实践

C# 从类调用方法和变量的最佳实践,c#,class,C#,Class,我有以下设置,我想知道我所做的是不是最好的方法: Project1 //reusable code and controls mainclass.cs usercontrol1.xaml usercontrol2.xaml Project2 //referencing Project1 mainwindow.xaml //containing usercontrol1.xaml and usercontrol2.xaml Project1包含在其他项目中使用的

我有以下设置,我想知道我所做的是不是最好的方法:

Project1 //reusable code and controls
    mainclass.cs
    usercontrol1.xaml
    usercontrol2.xaml

Project2 //referencing Project1
    mainwindow.xaml //containing usercontrol1.xaml and usercontrol2.xaml
Project1包含在其他项目中使用的类和用户控件,例如Project2。 在初始化Project2中的mainwindow时,我创建了一个mainclass的新实例,并将其作为变量传递给usercontrols,同时也将usercontrols作为变量传递给mainclass

通过这种方式,我可以从main类访问usercontrols中的所有公共方法和变量,反之亦然。这是一个好方法吗

public partial class MainWindow : Window
{
    public MainClass MC = new MainClass();
    public MainWindow()
    {
        InitializeComponent();
        MC.usercontrol1 = this.usercontrol1;
        MC.usercontrol2 = this.usercontrol2;

        usercontrol1.mainClass = MC;
        usercontrol2.mainClass = MC;
    }
...
我知道,如果通过事件来完成,这一部分会更合适,但是我需要在类和usercontrols之间交叉访问的方法和变量的数量非常多,而且这样做似乎很好


谢谢

既然所有这些类都在同一个项目中,为什么不在
main类中设置构造函数呢

public MainClass(usercontrol1 uc1, usercontrol2 uc2)
{
    uc1.mainClass = this;
    uc2.mainClass = this;
    this.usercontrol1 = uc1;
    this.usercontrol2 = uc2;
}
那么


否则,我不确定您到底想做什么。

循环依赖是不好的,紧密绑定的类也是不好的,因为它们打破了开闭原则

我不确定您想要完成什么,但我建议使用另一个类来编写所有三个类,或者如果可以的话使用事件。

我不会称之为“最佳实践”。正如您所说,最佳实践是使用事件向感兴趣的订阅者提供信息,而不是将控件和逻辑紧密绑定在一起。另外,将控件数据绑定到模型类,这样就不必“共享”任何属性。不要说你在做什么是行不通的,但这不是“最佳实践”方式。
public partial class MainWindow : Window
{
    public MainClass MC = new MainClass(this.usercontrol1, this.usercontrol2);
    public MainWindow()
    {
        InitializeComponent();
    }
...