C# 创建原子、中子、质子、化学反应的类层次结构
我需要帮助创建一个程序,可以显示任何原子及其成分(中子、质子、电子和化学反应)的层次结构 以下是我迄今为止所做的工作的代码,我是这方面的新手C# 创建原子、中子、质子、化学反应的类层次结构,c#,.net,visual-c#-express-2010,C#,.net,Visual C# Express 2010,我需要帮助创建一个程序,可以显示任何原子及其成分(中子、质子、电子和化学反应)的层次结构 以下是我迄今为止所做的工作的代码,我是这方面的新手 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Atoms { public class Atoms { protected string name = "Sodium";
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();
}
}
}
}
}
你们创造了质子、中子和电子,作为原子的继承物。你在这里说的是,基本单位是原子,质子、中子和电子是特殊的原子。事实显然并非如此。质子、中子和电子是基本单位,因为你没有指定任何更小的单位,一个原子包含许多质子、中子和电子 因此,我首先创建一个Atom类,它具有描述质子、中子和电子数量的属性。你可以把质子、中子和电子分类,让原子包含一系列质子、电子和中子,但我不确定这是否有用。当然,你们可以把每一个质子和任何其他质子区分开来,同样地,中子也是如此,但你们可能希望对电子更聪明一些。电子可能是不可区分的,但能量水平不是这样的,如果你要进入电离,你可能不想简单地有一个代表电子数的整数,如果你是,你可能想考虑一个能被填充的能级结构,这取决于这是什么。 您有一个字符串描述这是什么类型的元素-“金属”。若要设置一些规则,比如金属可以和非金属发生反应,最好定义不同元素类型的枚举。通过这种方式,您比较的是整数而不是字符串,这更有效,而且输入错误的内容并最终得到“反应”代码无法识别的新类型元素的范围也更小 而且,你似乎已经使你的中子进入了电子类。这意味着中子只能作为电子的一部分存在。你的测试类又在中子范围内了。您需要考虑不同类之间的逻辑关系,在这样的系统中,您不太可能需要在类中定义类-将它们作为不同的对象,并具有适当类型的类字段。因此,您的atom类可以这样开始:
public class Atom
{
public int number = 11;
public Electron[] electrons;
public Proton[] protons;
public Neutron[] neutrons;
public string name="Sodium";
public ElementTypeEnum elementType;
...
}
警告:请原谅我高中时对亚原子物理学的理解,如果我在事实上有任何错误,我相信我会很好地解释这个原理
您试图建模的是一系列具有关系的。即
- 一个原子有零个或更多的营养素
- 一个原子有一个或多个电子
- 一个原子有一个或多个质子
现在,has-a关系不是像您尝试的那样使用继承建模,而是通过组合建模
public class Atom
{
private List<Neutron> neutrons;
private List<Electron> electrons;
private List<Proton> neutrons;
}
这些只是作为想法提出的,因为你的问题有点模糊,但希望能给你一些继续下去的东西
化学反应,有一个与一个原子有一个关系。根据我的基本理解,有几种基本类型,最简单的是合成。这似乎需要2个原子并返回一个新的原子。您可以使用以下界面再次对其建模:
public interface ISynthesisReaction
{
Atom Synthesise(Atom left, Atom right);
}
public Interface IDisplayInfo
{
void GetInfo();
}
public class Atom : IDisplayInfo
{
public void GetInfo()
{
...
}
}
public class Electron : IDisplayInfo
{
public void GetInfo()
{
...
}
}
然后编写该接口的一个或多个实现。另一种可能是分解,它只需要一个原子,可以返回多个原子:
public interface IDecompositionReaction
{
Atom [] Decompose(Atom atom);
}
既然没有明确的问题,我假设你想要一个批评
仅当实体具有“是”关系时才应使用继承。例如,如果你可以说“电子是原子”,那么你应该考虑从原子中继承电子。由于电子不是原子,这表明你的遗传是错误的。相反,你会说“一个原子有一个电子”;“HAS a”关系表示聚合,因此给出:
class Atom
{
public Electron {get;set;}
...
}
这将允许您创建特定类型的原子,但随后将其重新设置为通用原子:
Atom a = new SodiumAtom();
a.GetInfo();
所有类都有一个“GetInfo”方法。这是一个“横切”函数,因为您可能希望很多类都具有此功能,而不管它们是否具有相同的基类。我建议使用一个界面:
public interface ISynthesisReaction
{
Atom Synthesise(Atom left, Atom right);
}
public Interface IDisplayInfo
{
void GetInfo();
}
public class Atom : IDisplayInfo
{
public void GetInfo()
{
...
}
}
public class Electron : IDisplayInfo
{
public void GetInfo()
{
...
}
}
那么问题到底是什么呢?实现一个原子核、质子、中子、电子、光子、原子、元素、离子和化学反应的类层次结构。我认为你需要详细说明你想从中得到什么。此外,社区中的大多数人不会是物理学家或化学家,所以你可能想解释层次结构。@SmartZulu这不是问题,这是你的家庭作业说明。如果你想在你的家庭作业中得到一些帮助,你必须做两件事:1)展示你所拥有的(勾选)2)提出明确的具体问题,而不仅仅是做我的家庭作业。也就是说,更多的是解决代码中的具体问题,而不是帮助设计你的对象,因此,您可能得不到适合您的答案。实际上,我会更进一步,将其更改为属性并返回质子
数组的长度,而不是数字
字段。