我的问题如下:
我正在构建一个控制台应用程序,它向用户询问它应该创建的对象数量以及必须为每个对象分配的4个变量。 新对象名称应包含从1开始的计数。
你会如何解决这个问题? 我正在考虑一个类,但我不确定如何从userinput在运行时创建对象。循环是最好的方法吗?
你会推荐什么样的类,结构,列表,数组....对象中的变量总是相同的类型,但我需要正确命名它们,这样我就可以有效地编写方法,在程序的后期阶段对它们执行操作。
我只是学习语言,我非常感谢有关如何解决问题的建议。
答案 0 :(得分:3)
如果我理解你的问题:
class MyClass
{
public int ObjectNumber { get; set; }
public string SomeVariable { get; set; }
public string AnotherVariable { get; set; }
}
// You should use keyboard input value for this
int objectsToCreate = 10;
// Create an array to hold all your objects
MyClass[] myObjects = new MyClass[objectsToCreate];
for (int i = 0; i < objectsToCreate; i++)
{
// Instantiate a new object, set it's number and
// some other properties
myObjects[i] = new MyClass()
{
ObjectNumber = i + 1,
SomeVariable = "SomeValue",
AnotherVariable = "AnotherValue"
};
}
这并不是你所描述的。添加键盘输入和东西:)大部分代码需要使用某种Main
方法来实际运行等。
在这种情况下,我选择了class
来保存您的4个变量。我只实现了3,我已经将它们实现为属性,而不是字段。我不确定这对你的任务是否有必要,但一般来说这是一个很好的习惯,没有公共场所,我不想成为教你不良习惯的人。请参阅auto-implemented properties。
您提到了struct
,这也是一个选项,具体取决于您要存储在其中的内容。一般来说,一个班级会更安全。
循环确实是初始化对象的方法。在这种情况下,for
循环是最实用的。它从0
开始计数,因为我们将对象放在一个数组中,而C#中的数组索引总是从0
开始。这意味着您必须使用i + 1
分配给对象编号,或者对象编号为0 - 9,就像它们在数组中的索引一样。
我正在使用object initializer syntax初始化对象,这是C#3.0中的新功能。 老式的方法是逐个分配它们:
myObjects[i] = new MyClass();
myObjects[i].ObjectNumber = i + 1;
myObjects[i].SomeVariable = "SomeValue";
或者,您可以为MyClass
定义constructor,其中包含3个参数。
最后一件事:这里的一些人发布了使用通用列表(List<MyClass>
)而不是数组的答案。这样可以正常工作,但在我的例子中,我选择使用你可以使用的最基本的形式。与数组不同,List没有固定的大小(注意我是如何初始化数组的)。如果您想稍后添加更多项目,或者您事先不知道需要存储多少项目,列表很棒。但是,在这种情况下,我们有键盘输入,所以我们确切地知道我们将拥有多少项。因此:数组。它将隐含地告诉谁正在阅读您的代码,您不打算稍后添加更多项目。
我希望这回答了一些问题,并提出了一些新的问题。看看兔子洞有多深:P
答案 1 :(得分:0)
使用列表或数组。列表示例:
int numberOfObjects = 3;
List<YourType> listOfObjects = new List<YourType>();
for(int i = 0 ; i < numberOfObjects ; i++ )
{
// Get input and create object ....
// Then add to your list
listOfObjects.Add(element);
}
这里,listOfObjects是一个通用列表,可以包含可变数量的YourType类型的对象。该列表将自动调整大小,以便它可以保存您添加到其中的对象数。希望这会有所帮助。
答案 2 :(得分:0)
如果我明白你的要求,你可能会做这样的事情:
class Foo
{
private static int count;
public string name;
public Foo(...){
name = ++count + "";
}
}
答案 3 :(得分:0)
我猜你在这里要做什么,但这是在黑暗中刺伤。我遇到的问题是处理整个“新对象名称应该包含一个从1开始的计数”的事情。无论如何,这是我的尝试:
public class UserInstantiatedClass
{
public int UserSetField1;
public int UserSetField2;
public int UserSetField3;
public int UserSetField4;
public string UserSpecifiedClassName;
}
public static class MyProgram
{
public static void Main(string [] args)
{
// gather user input, place into variables named
// numInstances, className, field1, field2, field3, field4
List<UserInstantiatedClass> instances = new List< UserInstantiatedClass>();
UserInstantiatedClass current = null;
for(int i=1; i<=numInstances; i++)
{
current = new UserInstantiatedClass();
current.UserSpecifiedClassName = className + i.ToString(); // adds the number 1, 2, 3, etc. to the class name specified
current.UserSetField1 = field1;
current.UserSetField2 = field2;
current.UserSetField3 = field3;
current.UserSetField4 = field4;
instances.Add(current);
}
// after this loop, the instances list contains the number of instances of the class UserInstantiatedClass specified by the numInstances variable.
}
}