这看起来非常基本,但我找不到与我正在寻找的完全相同的答案。
我有两节课。一个类有一个公共属性,其中赋值。
从第二课开始,我想使用公共属性的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
}
}
答案 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;