从另一个类访问属性值

时间:2018-01-22 15:52:46

标签: c# class properties

这看起来非常基本,但我找不到与我正在寻找的完全相同的答案。

我有两节课。一个类有一个公共属性,其中赋值。

从第二课开始,我想使用公共属性的VALUE(22)(不创建没有值的属性的新实例)

以下是我认为应该如何工作的代码(但不是)。我明白为什么它不起作用(因为OriginalClass.ID = null)。我不知道如何制作有效的等效物......任何帮助都会受到赞赏。

public partial class ClassOne
{
    private int iD;
    public int ID
    {
        get { return iD; }
        set
        {
            iD = value;
        }
    }

    public void MyMethod()
    {
        ID = 22;
    }

}

public class ClassTwo
{
    public void MyLocalMethod()
    {
        ClassOne OriginalClass = new ClassOne();
        var LocalID = OriginalClass.ID;  //I want LocalID to equal 22, but 
obviously doesn't
    }
}

3 个答案:

答案 0 :(得分:0)

如何在分配之前调用MyMethod()?

public class ClassTwo
{
    public void MyLocalMethod()
    {
        ClassOne OriginalClass = new ClassOne();
        OriginalClass.MyMethod();
        var LocalID = OriginalClass.ID;  //I want LocalID to equal 22, but 
obviously doesn't
    }
}

答案 1 :(得分:0)

这种情况下,您实际尝试做的一些其他信息会有所帮助。

你有很多选择让这项工作

1)您可以将第2课更改为此类

public class ClassTwo
{
    public void MyLocalMethod()
    {
        ClassOne OriginalClass = new ClassOne();
        OriginalClass.myMethod();
        var LocalID = OriginalClass.ID;
   }
}

2)如果你担心在创建OriginalClass后忘记调用myMethod(),你可以在ClassOne中创建一个工厂方法

public partial class ClassOne
{
    private int iD;
    public int ID
    {
        get { return iD; }
        set
        {
            iD = value;
        }
    }

    public void MyMethod()
    {
        ID = 22;
    }

    public static ClassOne createWithIdFact()
    {
      var returnValue = new ClassOne();
      returnValue.MyMethod();
      return returnValue;
    }
}

然后可以通过以下方式从第二类调用

public class ClassTwo
{
    public void MyLocalMethod()
    {
        ClassOne OriginalClass = ClassOne.CreateWithIdFact();
   }
}

3)我的猜测是,您不希望所有对象的实例都具有22的ID。如果您想为每个实例添加唯一ID,并且不想担心手动设置它们,从静态变量初始化iD变量。

public partial class ClassOne
{
    private static nexId = 0;
    private int iD;
    public int ID
    {
        get { return iD; }
        set
        {
            iD = value;
        }
    }

    public ClassOne()
    {
      this.iD = nextId++; // not thread safe
    }

    public static ClassOne createWithIdFact()
    {
      var returnValue = new ClassOne();
      return returnValue;
    }
}

答案 2 :(得分:0)

有很多方法可以做到这一点。最好的方法取决于您的背景和要求。

最简单的方法是致电MyMethod

ClassOne OriginalClass = new ClassOne();
OriginalClass.MyMethod();
var LocalID = OriginalClass.ID; // Now it's 22

另一种方法是在构造函数中将ID设置为22:

public ClassOne() {
    ID = 22;
}

ClassOne OriginalClass = new ClassOne();
var LocalID = OriginalClass.ID; // 22 again!

或者,如果你在C#6,你可以直接这样做:

// You don't need to declare "iD" as a backing field!
public int ID { get; set; } = 22;