C#在另一个类中创建一个类的实例

时间:2016-02-15 01:57:46

标签: c# class properties

我有一个具有多个动态自定义用户控件的应用程序,用于在datagridviews中收集边缘名称和曲线偏移。我的目标是使用一些方法将它们输入到一个类中,以便检索一些常见的数据组,以便稍后处理。

我有一个类定义了偏移的格式(因为它对于单个边和一个边列表都是相同的),然后是另一个将这些边组合成一个“示例”的类。第二个类中的方法将返回每个示例所需的公共数组。

代码低于 - 确定 - 然后当我尝试设置offSet的sName属性时,它返回NullReferenceException。我怀疑我没有在Example类中正确初始化事物,或者没有正确地公开或声明它们(静态,抽象,虚拟??)。 offSets类工作正常,但不是在Example类中访问它时。

请帮忙!

    private class offSets
    {
        public string sName { get; set; }
        public double d0 { get; set; }
        public double d1 { get; set; }
        public double d2 { get; set; }
        public double d3 { get; set; }
        public double d4 { get; set; }
        public double d5 { get; set; }
        public double d6 { get; set; }
        public double d7 { get; set; }
        public double d8 { get; set; }
        public double dLength { get; set; }
    }

    private class Example
    {
        public offSets curve1 { get; set; }
        public offSets curve2 { get; set; }
        public List<offSets> lstCurves { get; set; }

        public string testString { get; set; }

        public double[] somemethod()
        {
           //code that returns an array - something lie:
           return this.lstCurves.Select(i => i.d2).ToArray();
        }
    }

    private void temp()
    {
        Example e = new Example();

        e.testString = "This is some test text";

        MessageBox.Show(e.testString);
        // This works as expected.


        e.curve1.sName = "Some Name"; 
        // error on above line: "System.NullReferenceException"
     }

4 个答案:

答案 0 :(得分:2)

curve1属性声明,但是“空”(即null)。

将一个构造函数添加到Example类,然后在其中创建offSets个对象:

private class Example
{
    public offSets curve1 { get; set; }
    public offSets curve2 { get; set; }
    public List<offSets> lstCurves { get; set; }

    public string testString { get; set; }

    public Example()
    {
        this.curve1 = new offSets();
        this.curve2 = new offSets();
        this.lstCurves = new List<offSets>();
    }

    public double[] somemethod()
    {
       //code that returns an array - something lie:
       return this.lstCurves.Select(i => i.d2).ToArray();
    }
}

答案 1 :(得分:0)

这可能会为你做到这一点

Example e = new Example();
e.curve1 = new offSets();
e.curve1.sName = "Some Name";

答案 2 :(得分:0)

我想知道你是否必须说 e.curve1 = new offsets();

在最后一行之前?

答案 3 :(得分:0)

您收到错误是因为您没有初始化curve1。换句话说,你得到一个例外,因为e.curve1为null,所以不能分配e.curve1.sName。

您需要修改temp()函数:

private void temp()
{
    Example e = new Example();

    e.testString = "This is some test text";

    MessageBox.Show(e.testString);
    // This works as expected.


    e.curve1 = new offSets();
    e.curve1.sName = "Some Name";
    // now it should work
 }