我应该在哪里创建可以被其他类方法使用的对象?

时间:2011-09-03 18:44:19

标签: c# encapsulation

我不确定在哪里创建SolidColorBrush对象。他们应该a)在公共MainWindow()初始化方法中,b)直接在MainWindow类中,或c)在另一个新方法中?

在公共MainWindow()中创建了一些Ellipse对象,并且SetEllipsePosition在访问它们时没有问题(可能因为省略号作为arg传入?)。但是,在公共MainWindow()中创建的SolidColorBrush对象对SetEllipsePosition()不可见。

当我在类中直接创建这些对象时(在'Kinect Runtime'之后),SetEllipsePosition()会看到它们。但这是不好的风格吗?

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Ellipse headEllipse = new Ellipse();
        Ellipse leftEllipse = new Ellipse();
        Ellipse rightEllipse = new Ellipse();

        SolidColorBrush greenBrush = new SolidColorBrush(Colors.Green); // where should these
        SolidColorBrush redBrush = new SolidColorBrush(Colors.Red);     // objects be defined?
        SolidColorBrush orangeBrush = new SolidColorBrush(Colors.Orange);
        SolidColorBrush yellowBrush = new SolidColorBrush(Colors.Yellow);
    }

    //Kinect Runtime
    Runtime nui = new Runtime();


    private void SetEllipsePosition(FrameworkElement ellipse, Joint joint)
      {
      ...
                (ellipse as Ellipse).Fill = greenBrush;
                MainCanvas.Background = orangeBrush;
      ... 
      }
 }

2 个答案:

答案 0 :(得分:0)

你无法访问画笔的原因是因为它们是在构造函数MainWindow中创建的,如果你只是类本身的private SolidColorBrush greenBrush;然后在MainWindow()中添加一个像你现在这样的实例您将能够在SetEllipsePosition中访问它。

答案 1 :(得分:0)

最好在类级别声明变量并在ctor中实例化它。在您的情况下,SolidColorBrush对象是ctor私有的。那么使用配偶是什么?