У меня есть фундаментальный блок, когда дело доходит до объектов: когда вы создаете «новый» объект, он заменяет предыдущий. Если это так, то где вы помещаете создание объекта, чтобы он не заменялся повторяющимся вызовом, например while или For?Общие сведения об объектных рамках объекта
Я работаю через книгу C# и пытаюсь создать адресную книгу, используя многомерный массив в качестве моей таблицы. Моя проблема возникает каждый раз, когда я создаю «новый» массив, предыдущие данные теряются ... :-(
Если я переместлю объект Addressbook в другое место, остальная часть программы не сможет найти его. .. книги по объектно-ориентированному дизайну оставить меня путать и разочарование Надеется, вы можете пролить некоторый свет на то, где я неправильно в моем мышлении Вот моя программа:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Addressbook
{
public string[,] fullname;
public int cnt;
}
namespace ConsoleApp
{
class MethodParams
{
public static void Main()
{
string myChoice;
MethodParams mp = new MethodParams();
do
{
// show menu and get input from user
myChoice = mp.getChoice();
// Make a decision based on the user's choice
mp.makeDecision(myChoice);
// Pause to allow the user to see the results
Console.Write("press Enter key to continue...");
Console.ReadLine();
Console.WriteLine();
} while (myChoice != "Q" && myChoice != "q"); // Keep going until the user wants to quit
}
//*******************
// show menu and get user's choice
string getChoice()
{
string myChoice;
// Print A Menu
Console.WriteLine("My Address Book\n");
Console.WriteLine("A - Add New Address");
Console.WriteLine("D - Delete Address");
Console.WriteLine("M - Modify Address");
Console.WriteLine("V - View Addresses");
Console.WriteLine("Q - Quit\n");
Console.WriteLine("Choice (A,D,M,V,or Q): ");
// Retrieve the user's choice
myChoice = Console.ReadLine();
return myChoice;
}
//***********************
// make decision
void makeDecision(string myChoice)
{
Addressbook addrBk = new Addressbook(); //Create Addressbook Object
addrBk.fullname = new string[10, 10];
addrBk.fullname[0, 0] = "Tom";
addrBk.fullname[0, 1] = "Nesler";
addrBk.cnt = 1;
switch (myChoice)
{
case "A":
case "a":
Console.WriteLine("Enter First name");
String FName;
FName = Console.ReadLine();
Console.WriteLine("Enter Last name");
String LName;
LName = Console.ReadLine();
addrBk.fullname[addrBk.cnt,0] = FName;
addrBk.fullname[addrBk.cnt,1] = LName;
this.addAddress(ref addrBk); //Input address name
addrBk.cnt = addrBk.cnt + 1;
break;
case "V":
case "v":
this.viewAddresses(ref addrBk);
break;
case "Q":
case "q":
Console.WriteLine("Bye.");
break;
default:
Console.WriteLine("{0} is not a valid choice", myChoice);
break;
}
}
//*****************
// insert an address
void addAddress(ref Addressbook addrBk) //Addr Object containing name and Address
{
Console.WriteLine("Name: {0} {1} added.", addrBk.fullname[addrBk.cnt, 0], addrBk.fullname[addrBk.cnt, 1]);
}
//*****************
// show addresses
void viewAddresses(ref Addressbook addrBk)
{
Console.WriteLine("count is: {0}", addrBk.cnt);
for (int i=0; i < addrBk.cnt; i++)
{
Console.WriteLine("counter = {0}",i);
Console.WriteLine("Name: {0} {1} ", addrBk.fullname[i,0], addrBk.fullname[i,1]);
}
}
}
}
«Когда вы создаете« новый »объект, он заменяет предыдущий». Само по себе это не является содержательным заявлением. У вас может быть объект x = new object(); объект y = новый объект(); 'Там никакой замены не происходит. Я подозреваю, что вам нужно более четко различать ваш разум между переменными и объектами - затем отредактируйте свой вопрос, чтобы включить пример, который * только * показывает, с чем вы смущены. (Нам не нужна загрузка кода адресной книги ... просто простейший код, который вы можете представить, чтобы продемонстрировать проблему.) –
Найти = Список <- В коллекции в вашей книге. Поскольку вы следуете за книгой C#, это лучшее, что я могу сказать, чтобы вы могли понять, что вы делаете по своей собственной фазе. На самом деле, просто продолжайте читать книгу, и я бы поспорил, что в конце она расширит ваши знания. Добро пожаловать в StockOverflow. – Aizen
Спасибо Aizen! Я согласен с тем, что мне нужно продолжать читать, но на данный момент мне не хватает того, как объекты создаются в одной части моей программы и используются в другой без перезаписи. Jon: Я понимаю, что X и Y являются двумя различными экземплярами одного и того же объекта и занимают два разных пространства памяти. Но что, если каждый раз, когда я запускаю метод, я создаю X снова и снова? Я думаю, что каждый раз, когда я перезаписываю предыдущий набор значений, загружаемых в объект. Это правда? –