Реализовать иерархию классов
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Atoms
{
public class Atoms
{
protected string name = "Sodium";
protected string element ="Metal";
public virtual void GetInfo()
{
Console.WriteLine("name: {0}",name);
Console.WriteLine("element: {0}", element);
}
}
class Proton : Atoms
{
public int number = 11 ;
public override void GetInfo()
{
base.GetInfo();
Console.WriteLine("Proton number: {0}",number);
}
}
class Electron : Atoms
{
public int number = 11;
public override void GetInfo()
{
base.GetInfo();
Console.WriteLine("Electron number: {0}", number);
}
class Neutrons : Atoms
{
public int number = 12;
public override void GetInfo()
{
base.GetInfo();
Console.WriteLine("Neutron number: {0}", number);
}
class TestClass
{
static void Main()
{
Proton P = new Proton();
P.GetInfo();
Neutrons N = new Neutrons();
N.GetInfo();
Electron E = new Electron();
E.GetInfo();
Console.WriteLine("click any key to exit");
Console.ReadLine();
}
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Atoms
{
public class Atoms
{
protected string name = "Sodium";
protected string element ="Metal";
public virtual void GetInfo()
{
Console.WriteLine("name: {0}",name);
Console.WriteLine("element: {0}", element);
}
}
class Proton : Atoms
{
public int number = 11 ;
public override void GetInfo()
{
base.GetInfo();
Console.WriteLine("Proton number: {0}",number);
}
}
class Electron : Atoms
{
public int number = 11;
public override void GetInfo()
{
base.GetInfo();
Console.WriteLine("Electron number: {0}", number);
}
class Neutrons : Atoms
{
public int number = 12;
public override void GetInfo()
{
base.GetInfo();
Console.WriteLine("Neutron number: {0}", number);
}
class TestClass
{
static void Main()
{
Proton P = new Proton();
P.GetInfo();
Neutrons N = new Neutrons();
N.GetInfo();
Electron E = new Electron();
E.GetInfo();
Console.WriteLine("click any key to exit");
Console.ReadLine();
}
}
}
}
}
Электрон не может быть потомком Атома.
это атом состоит из ядра (нейтроны+протоны) и оболочки (электроны).
Протоны нейтроны электроны - должны иметь один интерфейс - элементарная частица.
Ион - вообще не отдельный класс, а атом, где число протонов не равно числу электронов.
Ядро - это список типа <элементарные частицы>
Оболочка - это список типа <электроны>
Химическая реакция - обьединение коллекций оболочек, когда одни и те же электроны принадлежат двум атомам.
Дальше надо (если надо) заморачиваться со структурой оболочек....
Цитата: D129
Атом - два поля:
Ядро - это список типа <элементарные частицы>
Оболочка - это список типа <электроны>
Химическая реакция - обьединение коллекций оболочек, когда одни и те же электроны принадлежат двум атомам.
Дальше надо (если надо) заморачиваться со структурой оболочек....
Ядро - это список типа <элементарные частицы>
Оболочка - это список типа <электроны>
Химическая реакция - обьединение коллекций оболочек, когда одни и те же электроны принадлежат двум атомам.
Дальше надо (если надо) заморачиваться со структурой оболочек....
можна пример на с#
Цитата: the dark Knight
можна пример на с#
да легко.
Код:
public abstract class UberQuark
{
public virtual int Charge
{
get;
set;
}
public virtual double Mass
{
get;
set;
}
}
public class Electron : UberQuark
{
public override int Charge
{
get
{
return -1; //
}
}
public override double Mass
{
get
{
return 1; // I prefer mass of electrons as unit ;-)
}
}
}
public class Newtron: UberQuark
{
public override int Charge
{
get
{
return 0; //
}
}
public override double Mass
{
get
{
return 1836;
}
}
}
public class Proton : UberQuark
{
public override int Charge
{
get
{
return 1;
}
}
public override double Mass
{
get
{
return 1836;
}
}
}
public class Atom : UberQuark
{
public Atom ()
{
Nuclons = new List<UberQuark>();
Electrons = new List<Electron>();
}
public List<UberQuark> Nuclons;
public List<Electron> Electrons;
public override int Charge
{
get
{
int charge = Nuclons.Sum(onePart => onePart.Charge) + Electrons.Sum(oneEl => oneEl.Charge);
return charge;
}
}
public override double Mass
{
get
{
return Nuclons.Sum(oneNuke => oneNuke.Mass) + Electrons.Sum(oneEl => oneEl.Mass);
}
}
public bool CombineWith(Atom atomToAdd)
{
if (atomToAdd.Charge < 0 && this.Charge > 0)// possible
{
//TODO add needed quantity electrons to collection
return true;
}
if (atomToAdd.Charge > 0 && this.Charge < 0)// possible
{
//TODO add needed quantity electrons to collection
return true;
}
return false;
}
}
{
public virtual int Charge
{
get;
set;
}
public virtual double Mass
{
get;
set;
}
}
public class Electron : UberQuark
{
public override int Charge
{
get
{
return -1; //
}
}
public override double Mass
{
get
{
return 1; // I prefer mass of electrons as unit ;-)
}
}
}
public class Newtron: UberQuark
{
public override int Charge
{
get
{
return 0; //
}
}
public override double Mass
{
get
{
return 1836;
}
}
}
public class Proton : UberQuark
{
public override int Charge
{
get
{
return 1;
}
}
public override double Mass
{
get
{
return 1836;
}
}
}
public class Atom : UberQuark
{
public Atom ()
{
Nuclons = new List<UberQuark>();
Electrons = new List<Electron>();
}
public List<UberQuark> Nuclons;
public List<Electron> Electrons;
public override int Charge
{
get
{
int charge = Nuclons.Sum(onePart => onePart.Charge) + Electrons.Sum(oneEl => oneEl.Charge);
return charge;
}
}
public override double Mass
{
get
{
return Nuclons.Sum(oneNuke => oneNuke.Mass) + Electrons.Sum(oneEl => oneEl.Mass);
}
}
public bool CombineWith(Atom atomToAdd)
{
if (atomToAdd.Charge < 0 && this.Charge > 0)// possible
{
//TODO add needed quantity electrons to collection
return true;
}
if (atomToAdd.Charge > 0 && this.Charge < 0)// possible
{
//TODO add needed quantity electrons to collection
return true;
}
return false;
}
}
Химическую реакцию сами доведите - какие у вас там требования к точности модели.
А то ведь по запарке и мироздание запрограммировать можно....
;-)