Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建原子、中子、质子、化学反应的类层次结构_C#_.net_Visual C# Express 2010 - Fatal编程技术网

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)提出明确的具体问题,而不仅仅是做我的家庭作业。也就是说,更多的是解决代码中的具体问题,而不是帮助设计你的对象,因此,您可能得不到适合您的答案。实际上,我会更进一步,将其更改为属性并返回
质子
数组的长度,而不是
数字
字段。