2016-04-25 114 views
0

我从标题知道你会说这是一个重复的,但是......参考函数C#

所以,我在MainWindow类的构造函数创建了类,并取得了一定的对象(Masina类):

public class MainWindow 
{ // example 
    private Masina[] _masina = new Masina[10]; 
    _masina[0].Load(1, 'x'); // works 
    SomeFunction(_masina); 
} 

当我使用这个类功能构造它工作正常,但是当我尝试使用一些功能,通过这个争论是这样的:

public static void SomeFunction(Masina[] masina) 
    { 
     for (int i = 0; i < 10; i++) 
      try 
      { 
       masina[i].Load(i, 'x'); 
      } 
      catch 
      { 
      } 
    } 

然后SomeFun ction将此争论视为未引用。 ref不适合我!

任何人都可以帮我解决吗?

+4

什么是预期的行为,你怎么看? “作品”和“不工作”并不是真正有帮助的问题描述。 – germi

+0

你是什么意思,由裁判“不工作”你会得到什么错误?也是这两个代码片段在同一个文件中,如果不是一次引用另一个,或者它们在同一个namspace中? –

+1

这个'私人马西纳[] _masina =新马西纳[10]; _masina [0] .Load(1,'x');'不应该工作,因为数组不包含对实例的引用。 – Maarten

回答

1

大概要初始化Masina[]阵列中的构造,像这样:

public class MainWindow { 
    // Declaraion is OK, calling method _masina[0].Load(1, 'x') - is not 
    private Masina[] _masina = new Masina[10]; 

    // constructor is the place you're supposed to put complex initialization to 
    public MainWindow() { 
    // You can call the method in the constructor 
    SomeFunction(_masina); 
    } 

    public static void SomeFunction(Masina[] masina) { 
    // validate arguments in the public methods 
    if (null == masina) 
     throw new ArgumentNullException("masina"); 

    // do not use magic numbers (10), but actual parameters (masina.Length) 
    for (int i = 0; i < masina.Length; ++i) 
     masina[i].Load(i, 'x'); 

    // hiding all exceptions - catch {} - is very bad idea 
    } 
}