Как динамически создавать экземпляр класса в С#?

-8

Мне нужно создать неизвестное количество экземпляров класса и иметь возможность отслеживать их во время выполнения. Пример Пользователь скажет, что они хотят создать _n количество автомобилей. Затем приложение создает экземпляр car01 - car_n, и по мере запуска приложения пользователь может использовать автомобиль "X", и экземпляр будет отслеживать свой собственный пробег. Как создать экземпляр экземпляра автомобиля и как я могу ссылаться на конкретный экземпляр? Я знаю, что у меня может быть класс и смехотворное количество заранее определенных автомобилей, но кажется, что если пользователи хотят создать 5 или 6 автомобилей, код может выскочить car1-car6.

class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
Foo[] FooCar = new Foo[5];
string[] _NamesForFoo = { "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf" };
int FoosToMake = rnd.Next(1, _NamesForFoo.Length);
for (int i = 0; i < FoosToMake; i++)
{
FooCar[i] = new Foo(_NamesForFoo[i], rnd.Next(100,500));
Console.WriteLine("You just created a FooCar named {0} with a count of {1}.",
FooCar[i]._FooName, FooCar[i]._FooCount);
}
}

public class Foo
{
public string _FooName { set; get; }
public int _FooCount { set; get; }

public Foo(string _NameIn, int _CountIn)
{
_FooName = _NameIn;
_FooCount = _CountIn;
}
}
}

Ссылка, представленная в ответе, не отвечает на этот вопрос. Коллекция или список тоже не работали. Вот пример

class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
string[] _NamesForFoo = { "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf" };
int FoosToMake = rnd.Next(1, _NamesForFoo.Length);

List<Foo> FooCar = new List<Foo>
{
for (int i = 0; i < FoosToMake; i++)
{
new Foo(){_FooName = _NamesForFoo[i], _FooCount = rnd.Next(100,500)};
}
};
}

public class Foo
{
public string _FooName { get; set; }
public int _FooCount { get; set; }

public Foo(string _NameIn, int _CountIn)
{
_FooName = _NameIn;
_FooCount = _CountIn;
}
}
}

спросил(а) 2015-11-08T04:13:00+03:00 4 года, 11 месяцев назад
0
59

Вы можете использовать коллекцию:

var cars = new List<Car>();

for (int i = 0; i < NumCarsNeeded; i++)
{
cars.Add(new Car());
}

//Access car #1 (index 0)
cars[0].Mileage += 5;

ответил(а) 2015-11-08T04:17:00+03:00 4 года, 11 месяцев назад
42

Оказывается, массив класса был хорошим способом. Вот пример, который сработал.

class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
Foo[] FooCar = new Foo[6];
string[] _NamesForFoo = { "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf" };
int FoosToMake = rnd.Next(1, _NamesForFoo.Length);

Console.WriteLine("Making {0} FooCars.", FoosToMake);
//create the cars
for (int i = 0; i < FoosToMake; i++)
{
FooCar[i] = new Foo( _NamesForFoo[i], rnd.Next(100,500));
}
//list the cars
for (int i = 0; i < FoosToMake; i++)
{
Console.WriteLine("FooCar {0} has a count of {1}", FooCar[i]._FooName, FooCar[i]._FooCount );
}
//modify a car
FooCar[0]._FooCount += 2500;
//show change to specific car
Console.WriteLine("FooCar {0} now has a count of {1}", FooCar[0]._FooName, FooCar[0]._FooCount);

Console.ReadKey();
}

public class Foo
{
public string _FooName { get; set; }
public int _FooCount { get; set; }

public Foo(string _NameIn, int _CountIn)
{
_FooName = _NameIn;
_FooCount = _CountIn;
}
}
}

ответил(а) 2015-11-08T18:52:00+03:00 4 года, 11 месяцев назад
41

Я не уверен, понимаю ли я это полностью, но я думаю, что вот что вы ищете:

// To store common properties and methods, use an abstract class:
public abstract class Car {
public string Make {get; set;};
public string Model {get; set;};
// The rest of properties
}

// To store special data for a particular type of car:
public class Van: Car
{
public string DoorType {get; set;}
// the rest of properties
}

public class Truck: Car
{
//...
}

Затем для создания и ведения списка автомобилей используйте полиморфизм:

List<Car> cars = new List<Car>();
Van v1 = new Van { Make="...", Model="...", DoorType="..." };
Truck t1 = new Truck { Make="...", Model="...", /*...*/ };

cars.Add(v1);
cars.Add(v2);

string doortype = (cars[0] as Van).DoorType;
string model = cars[0].Model;

Думаю, у тебя есть идея.

ответил(а) 2015-11-08T04:26:00+03:00 4 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема