类不包含构造函数错误

时间:2014-05-12 18:59:12

标签: c# class oop

我对编程比较陌生,而且我刚上课。 问题是,我的编译器正在返回

  

"错误1' OlioohjelmoinninPerusteet.Blogimerkinta'不包含   带有1个参数的构造函数"

我不知道如何解决这个问题,这是我的代码。

using System;
namespace OlioohjelmoinninPerusteet
{
    class Blogimerkinta
    {
        string teksti;
        string[] avainsanat;

        public string Teksti { get; set; }
        public string[] Avainsanat { get; set; }
    }

    class Ohjelma
    {
        static void Main()
        {
            string otsikko = "Otsikko";
            Blogimerkinta merkinta = new Blogimerkinta(otsikko);
            merkinta.Teksti = "Teksti";
            merkinta.Avainsanat = new string[] { "Eka", "Toka" };
        }
    }
}

9 个答案:

答案 0 :(得分:3)

您正在新建一个对象并传入构造函数的参数:

Blogimerkinta merkinta = new Blogimerkinta(otsikko);

此对象没有带任何参数的构造函数,默认情况下,您可以使用默认构造函数,所有c#对象都不带参数:

Blogimerkinta merkinta = new Blogimerkinta();

或创建一个带字符串参数的构造函数:

public Blogimerkinta(string arg) 
{
    //use argument for something
}

答案 1 :(得分:3)

你需要为你的类添加一个构造函数:

class Blogimerkinta
{
    string teksti;
    string[] avainsanat;

    public string Teksti { get; set; }
    public string[] Avainsanat { get; set; }

    public Blogimerkinta(string otsikko)
    {
        this.teksti = otsikko;
    }
}

答案 2 :(得分:3)

By default, if you do not specify a constructor it is the same as below

  

如果没有为对象提供构造函数,C#将创建   默认情况下,一个实例化对象并设置成员变量   到默认值表中列出的默认值(C#   参考)。

Using Constructors (C# Programming Guide)

  

不带参数的构造函数称为默认值   构造函数。只要对象是,就会调用默认构造函数   通过使用new运算符进行实例化,并且不提供任何参数   新的。

     

除非类是静态的,否则给出没有构造函数的类   公共默认构造函数由C#编译器启用,以便启用类   实例

class Blogimerkinta
{
    string teksti;
    string[] avainsanat;

    public string Teksti { get; set; }
    public string[] Avainsanat { get; set; }
    public Blogimerkinta()
    {
    }
}

您正在调用未指定的构造函数,即

    public Blogimerkinta(string TADA)
    {
    }

答案 3 :(得分:2)

如果你没有定义一个默认构造函数(你没有),C#会创建一个默认构造函数,默认构造函数没有参数,也没有做任何事情。它等同于:

public Blogimerkinta()
{
}

为了使用一个带参数的构造函数(我假设在对象内部设置了一个属性到该参数的值),你需要定义一个。像这样:

public Blogimerkinta(string teksti)
{
    this.Teksti = teksti;
}

(或者设置你想要在内部设置的任何值。目前你的类只有一个string类型的属性,但是命名使得它不清楚你是否正在尝试设置它。)

答案 4 :(得分:1)

好吧,您正在尝试创建Blogimerkinta的实例并将字符串参数传递给构造函数。但是,您的类上没有任何带有字符串参数的构造函数。无论是创建构造函数还是使用默认的无参数构造函数来创建实例:

Blogimerkinta merkinta = new Blogimerkinta();

答案 5 :(得分:1)

您的Blogimerkinta没有为其定义构造函数。在编译期间,将生成一个不带参数的默认值。如果您希望您的类在实例化期间接受参数,请创建一个带参数的构造函数。

 class Blogimerkinta
    {
        public Blogimerkinta(string foo){
         //do something with foo
        }
        string teksti;
        string[] avainsanat;

        public string Teksti { get; set; }
        public string[] Avainsanat { get; set; }
    }

答案 6 :(得分:1)

这一行用一个参数调用构造函数。

Blogimerkinta merkinta = new Blogimerkinta(otsikko);

要解决此问题,您必须创建一个。

class Blogimerkinta
{
    string teksti;
    string[] avainsanat;

    public Blogimerkinta(){} // This is parameterless constructor
    public Blogimerkinta(string input)
    {
        if(input != null)
            teksti = input; //You initialize class fields here or do other stuff
    }
    public string Teksti { get; set; }
    public string[] Avainsanat { get; set; }
}

正如您在Main()中看到的那样,您传递的是string值,因此构造函数必须使用字符串值,以使用该值初始化其字段/字段(可能更多值)

检查msdn,因为他们解释得非常好。

http://msdn.microsoft.com/en-us/library/ace5hbzh.aspx

答案 7 :(得分:1)

一个类有一个或多个构造函数。如果您不提供一个,编译器将创建一个空的: 当你说新的Blogimerkinta()'时会调用构造函数。 你正在调用一个带参数的构造函数:new Blogimerkinta(otsikko) 但是你没有定义构造函数。

您需要定义此构造函数:

public Blogimerkinta(string s) {
    teksti = s; //I don't know which field you want to assign, just an example
}

(所以它看起来像一个方法,但是没有返回类型,并且它与类具有相同的名称)

如果您没有定义构造函数,则只能调用' new Blogimerkinta()'

答案 8 :(得分:-1)

以下是一般修复:

class Blogimerkinta
    {
        string teksti;
        string[] avainsanat;
        string foo="";
        public Blogimerkinta(string bar)
        {
              foo=bar;
        }
        public string Teksti { get; set; }
        public string[] Avainsanat { get; set; }
    }