【问题标题】:How do I use a class as a template in C#?如何在 C# 中使用类作为模板?
【发布时间】:2015-06-16 01:14:23
【问题描述】:

我不确定我问的是否正确,请耐心等待。我目前正在尝试对神经网络进行编程。下面是一些示例代码。

using System;
namespace Network
{
    class BaseNeuron
        {
            public static void Main (string[] args)
            {
                public int Weight;
                public void sendPulse()
                {
                }
                public void receivePulse()
                {
                }
            }
        }
    }

所以基本上,我希望能够创建 BaseNeuron 类的多个实例,每个“神经元”都与其他“神经元”相关联以构成神经元网络。有什么方法可以做到这一点,而不必为每个神经元重复这个 sn-p 代码?

【问题讨论】:

  • 我认为您的字段和方法不属于您的 Main 方法:)
  • 为每个神经元重复这个 sn-p 代码”到底是什么意思?您的意思是您有多种类型的神经元要为其创建类?
  • 是的:这就是面向对象编程的重点;您创建一个类型的多个实例。事实上,为了回答你的问题,类 is 已经是模板了;它内置在语言的设计中。看来您有点过头了,在尝试解决您的领域问题之前,您应该退后一步,增加对基本编程概念的熟悉程度。
  • @GrawCube,是的,我对 C# 是半新的,所以方法和诸如此类的整个想法对我来说仍然有点陌生,但要掌握它。至于重申,这和你说的差不多。我想要有多个神经元(为了创建一个神经元网络),所以每个神经元都可以根据某些刺激与其他神经元相互作用。问题是,如果不为每个单独的神经元显式输入代码,我无法找到一种方法。 (即 Neuron0001 类、Neuron0002 类等)。
  • 还有一点(我希望是最后一点)建议:您发布的示例代码无法编译。通常的 stackoverflow 方法是让您将示例代码与编译器错误一起发布并说“我做错了什么”?或者,如果它编译但没有达到您的预期,请发布您的预期和实际行为并说“我做错了什么?”换句话说,发布一个可以有特定解决方案的特定问题。这可能会帮助您更有条理地浮出水面。

标签: c# class artificial-intelligence


【解决方案1】:

首先,你提供的代码有一些错误:

class BaseNeuron
{
    public static void Main (string[] args)
    {
        public int Weight;

        public void sendPulse()
        {
        }

        public void receivePulse()
        {
        }
    }
}

应该是:

class BaseNeuron
{            
    //class field
    public int Weight;

    //class method
    public void SendPulse(/*Parameters ...*/)
    {
        //Do stuff
    }

    //class method
    public void ReceivePulse(/*Parameters ...*/)
    {
        //Do stuff
    }            
}

请注意,Main 已消失。类通常没有Main 方法,它通常只是应用程序的入口点(程序运行时执行的第一个函数)。

基本上,每个类都是对象的模板,这意味着您可以使用new 关键字创建该类的新实例,如下所示:

//creating two seperate neurons
neuron1 = new BaseNeuron();
neuron2 = new BaseNeuron();

//Notice that each SendPulse is called on separate objects!
neuron1.SendPulse();
neuron2.SendPulse();

我建议您阅读一些关于类的内容(可能是here),以便更好地了解它是如何工作的。

好的,现在我们已经弄清楚了我们的班级。你说我们想创建一个由多个神经元组成的网络,这些神经元是上述类的实例。 所以,你可能想要做的是:

class Program
{
    public void Main(string[] args)
    {
        //the size of the network
        int size = 5;

        //create array of Neurons
        BaseNeuron[] network = new BaseNeuron[size];

        for(int i = 0; i < network.length; i++)
        {
            //actually create a new nueron (instantiate them)
            network[i] = new BaseNeuron();

            //link up neurons together, etc
        }
    }
}

当然,实现取决于BaseNeuron 类的内部实现。您可能还需要创建一个NeuralNetwork 类来包含上述代码和相关函数。

【讨论】:

  • 您跳过了一步。一个非常重要的。
  • 我只是解释了一般方法,但请赐教
  • 你从未实例化过神经元。创建引用类型的数组不会填充引用。
  • @JohnSaunders Saunders 当然,我认为这是微不足道的。不过我会尽快修复它。我的错。
  • 这就是你所要做的。类是对象的“模板”。从该类创建的所有对象都是该类的实例。简单的 OO,否则您可能无法自己学习。请拿起一本书。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多