我是c#的新手,我想我想这样做,但也许我不知道并且不知道!
我有一个名为SyncJob的课程。我希望能够创建一个实例来备份My Documents中的文件(只是一个例子)。然后,我想创建另一个SyncJob实例来备份另一个文件夹中的文件。换句话说,我可以在内存中拥有同一个类的多个实例。
我在我的代码中首先声明了对象var,因此它可以被下面的所有方法访问。
我的问题是:使用相同的实例名称将在内存中为对象创建一个新实例,我该如何管理这些对象?意思是,如果我想设置其中一个属性,我该如何告诉编译器将更改应用到哪个实例?
正如我在开头所说,也许这是管理同一类的多个实例的错误方案......也许有更好的方法。
这是我的原型代码:
Form1.cs的
namespace Class_Demo
{
public partial class Form1 : Form
{
BMI patient; // public declarition
public Form1()
{
InitializeComponent();
}
private void btnCreateInstance1_Click(object sender, EventArgs e)
{
patient = new BMI("Instance 1 Created", 11); // call overloaded with 2 arguments
displayInstanceName(patient);
}
private void displayInstanceName(BMI patient)
{
MessageBox.Show("Instance:"+patient.getName()+"\nwith Age:"+patient.getAge());
}
private void btnCreateInstance2_Click(object sender, EventArgs e)
{
patient = new BMI("Instance 2 Created", 22); // call overloaded with 2 arguments
displayInstanceName(patient);
}
private void btnSetNameToJohn_Click(object sender, EventArgs e)
{
// this is the issue: which instance is being set and how can I control that?
// which instance of patient is being set?
patient.setName("John");
}
private void btnDisplayNameJohn_Click(object sender, EventArgs e)
{
// this is another issue: which instance is being displayed and how can I control that?
// which instance of patient is being displayed?
displayInstanceName(patient);
}
}
}
班级档案:
namespace Class_Demo
{
class BMI
{
// Member variables
public string _newName { get; set; }
public int _newAge { get; set; }
// Default Constructor
public BMI() // default constructor name must be same as class name -- no void
{
_newName = "";
_newAge = 0;
}
// Overload constructor
public BMI(string name, int age)
{
_newName = name;
_newAge = age;
}
//Accessor methods/functions
public string getName()
{
return _newName;
}
public int getAge()
{
return _newAge;
}
public void setName(string name)
{
_newName = name;
}
}
}
答案 0 :(得分:4)
您可以public List<BMI> PatientList { get; set; }
代替BMI patient;
如果你有一个patient
,你不确定访问哪个项目以及何时分配它将取代之前的
public List<BMI> PatientList { get; set; }
public Form1()
{
InitializeComponent();
PatientList = new List<BMI>();
}
使用BMI
列表,您可以添加如下项目
PatientList.Add(new BMI("Instance 1 Created", 11));
PatientList.Add(new BMI("Instance 2 Created", 22));
如果需要设置实例1的名称,可以按索引获取项目
PatientList[0].setName("John");
或者您可以通过patient
PatientList
如果您需要使用LINQ
显示&#34; John&#34;的patient
详细信息
displayInstanceName(PatientList.FirstOrDefault(p=>p.Name =="John"));
答案 1 :(得分:1)
如果您需要管理实例集合,请使用List<BMI>
或类似内容。通用List<T>
类可以容纳(几乎)任何类型的对象,易于使用等。它也是.NET工具包的重要组成部分,您将使用很多次。
另外,考虑重写BMI类以更有效地使用属性:
class BMI
{
public string NewName { get; set; }
public int NewAge { get; protected set; }
public BMI()
: this("", 0)
{ }
public BMI(string name, int age)
{
NewName = name;
NewAge = age;
}
}
除非您需要与其他系统互操作,否则不需要访问器方法。在属性本身的get
和set
访问器上使用修饰符可以创建公共读取/私有写入属性等。