Я изучаю методы доступа и перечисление. Я написал общедоступный класс «Автомобиль» в пространстве имен «Транспортные средства» и установил частные свойства, такие как _manufacturer, _model, _year и _color. Я хотел бы написать один метод для доступа к свойствам, а другой - для их установки / обновления. Это мой класс:
using System;
namespace Vehicles
{
public class Car
{
private string _manufacturer;
private string _model;
private string _year;
private string _color;
public void honkHorn()
{
// Add argument for a file name?
// Code here to play a WAV file?
MessageBox.Show("Honk!");
}
public string getCarInfo(string whichProperty)
{
switch (whichProperty)
{
case ("manufacturer"):
return _manufacturer;
case ("model"):
return _model;
case ("year"):
return _year;
case ("color"):
return _color;
default:
return null;
}
}
public void setCarInfo(string whichProperty, string newValue)
{
switch (whichProperty)
{
case ("manufacturer"):
_manufacturer = newValue;
break;
case ("model"):
_model = newValue;
break;
case ("year"):
_year = newValue;
break;
case ("color"):
_color = newValue;
break;
}
}
}
}
А это моя форма:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Vehicles;
namespace CS_Enumeration
{
public partial class Form1 : Form
{
public Car myCar = new Car();
public Form1()
{
InitializeComponent();
myCar.setCarInfo("manufacturer", "Ford");
labelManfValue.Text = myCar.getCarInfo("manufacturer");
myCar.setCarInfo("model", "Ranger");
labelModelValue.Text = myCar.getCarInfo("model");
myCar.setCarInfo("year", "2012");
labelYearValue.Text = myCar.getCarInfo("year");
myCar.setCarInfo("color", "Blue");
labelColorValue.Text = myCar.getCarInfo("color");
}
private void button1_Click(object sender, EventArgs e)
{
myCar.honkHorn();
}
}
}
Действительно ли это лучший способ написать единственный метод, который может получить / установить? Сначала я попытался привести строковое значение, которое соответствует имени свойства объекта и вернуть фактическое свойство, но это не работает (если кто-то не знает, как преобразовать строку в свойство объекта?).
Спасибо за ответы. Это все упражнения из книги, которую я читаю. Дело доходит до того, что не все должно быть публичным, но и не все должно быть приватным. Итак, как мне узнать, когда что-то должно / не должно быть публичным / частным? Похоже, книга ведет меня в неверном направлении относительно того, что такое хороший дизайн кода. У кого-нибудь есть предложения по книгам для изучения хороших практик проектирования кодирования для Visual C #?