Хорошо, давайте перейдем сверху вниз:
Пространство имен - это логический порядок кода.
Реальная аналогия - это библиотека.Библиотека содержит все книги, но имеет смысл иметь разделы библиотеки, посвященные определенным областям, например, книги (код) по физике
Класс - это модель (почти всегда полученная из объектов реального мира), которая раскрываетфункции и свойства.Классы могут (и должны) инкапсулировать (скрывать) свойства и функции, которые разработчик не желает, чтобы другие разработчики могли получить.Обратите внимание:
public class Car{
public Car(){}//default constructor.
public Car(int tirecount){//this constructor allows initialisation of the class to some 'safe' state
Tires = new Tire[tirecount];
}
//properties
public Tire[] Tires{get;set}//bad. at any point you can remove a tire from the car
public bool IsStopped{get;private set;}//safe. can check if car is stoppped outside class but can only change value inside car
//functions (...methods)
public Start(){//starts car
IsStopped = false;
}
public Stop(){
IsStopped = true;
}
public RemoveTire(int tireIndex)
{
if(!this.IsStopped)this.Stop();
Tires[tireIndex].Remove();//safe to remove tire when stopped
}
}
Чтобы получить повторное использование кода и полиморфное поведение, вы должны прочитать об интерфейсах.Интерфейсы позволяют определять контракт.Внутренняя реализация контракта может измениться, но уже определенные методы не могут быть изменены без нарушения исходного кода, который опирается на этот контракт.Дополнительные соглашения могут быть добавлены без нарушения старых реализаций.Пример:
Class Man реализует ITalk Class Dog реализует ITalk
Состояния контракта ITalk 'У меня есть функция' Speak ', т.е.
interface ITalk{
void Speak();
}
class World
{
List<ITalk> beings;
public World(List<ITalk> beingsToPopulateWorldWith)
{
beings = beingsToPopulateWorldWith;
}
public void MakeAllAnimalsTalk()
{
foreach(var b in beings)b.Speak();//because we know all object in the beings list use the ITalk interface (contract) we KNOW that we can call .Speak(). What each ITalk does in speak is up to them but we know we can call it.
}
}
Так что Man.Speak () может выводить«Hi» и Dog.Speak () могут выдавать «Woof».
Классы также могут расширяться, поэтому рассмотрим пример Man / Dog.Их базовый класс может быть Animal.Animal определяет IsAlive.Человек происходит от Животного, поэтому получает IsAlive, как и Собака, однако Человек может затем определить альтернативное поведение, то есть AbilityToMakeTools, чем поведение собаки.
Я обнаружил, что как только вы начинаете рассматривать классы как объекты / процессы реального мира (все можетмоделируется даже самая абстрактная «вещь»), тогда классы начинают обретать логический смысл.
HTH