类不包含构造函数错误
Posted
技术标签:
【中文标题】类不包含构造函数错误【英文标题】:Class does not contain contstructor error 【发布时间】:2014-06-30 06:32:40 【问题描述】:我对编程比较陌生,而且我刚刚开始上课。 问题是,我的编译器正在返回
“错误 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 个答案,还在数... @Rahul 不确定它是什么,但它不是日语。是的……突然提出这个问题的人数之多令人震惊。其中超过一半是 1K+ @gitsitgo 这是芬兰语。 【参考方案1】: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)
【讨论】:
【参考方案2】:你正在新建一个对象并为构造函数传递一个参数:
Blogimerkinta merkinta = new Blogimerkinta(otsikko);
此对象没有带任何参数的构造函数,默认情况下,您可以使用所有 c# 对象获取的默认构造函数,不带参数:
Blogimerkinta merkinta = new Blogimerkinta();
或创建一个接受字符串参数的构造函数:
public Blogimerkinta(string arg)
//use argument for something
【讨论】:
尽管您使用了“newing up”,但您仍会获得 +1。动词怪异的语言。 只是你的标准编程术语 =) 您的解释是英文的,但示例是日文的。这是不可接受的。 :) 这些例子是芬兰语,@Rahul【参考方案3】:你需要像这样为你的类添加一个构造函数:
class Blogimerkinta
string teksti;
string[] avainsanat;
public string Teksti get; set;
public string[] Avainsanat get; set;
public Blogimerkinta(string otsikko)
this.teksti = otsikko;
【讨论】:
【参考方案4】:如果你没有定义一个默认构造函数(你没有定义),C# 会创建一个默认构造函数,并且默认构造函数没有参数并且不做任何事情。相当于这样:
public Blogimerkinta()
为了使用带有参数的构造函数(我假设在内部将对象的属性设置为该参数的值),您需要定义一个。像这样的:
public Blogimerkinta(string teksti)
this.Teksti = teksti;
(或者设置您想要在内部设置的任何值。目前您的类只有一个 string
类型的属性,但命名使您不清楚这是否是您要设置的值。)
【讨论】:
【参考方案5】:好吧,您正在尝试创建Blogimerkinta
的实例并将字符串参数传递给构造函数。但是,您的类上没有任何带有字符串参数的构造函数。要么创建构造函数,要么使用默认值创建实例的无参数构造函数:
Blogimerkinta merkinta = new Blogimerkinta();
【讨论】:
【参考方案6】:您的 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;
【讨论】:
【参考方案7】:这一行用一个参数调用构造函数。
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
【讨论】:
仅供参考:您不需要测试字符串input
是否为空。
@NathanKoop 很好,因为string
是引用类型,它可以是null
,因此通常没有人愿意使用null
但是您正在将一个字符串分配给一个字符串,因此使用您的代码,如果输入为空,teksti 将设置为什么?
@NathanKoop 为 null,我知道,但测试您的输入是一种很好的编程习惯,因为该字符串不会在该类中的某个位置使用。
@NathanKoop 好吧不是,但由于 OP 是编程新手,他应该从一开始就学习好的做法:)【参考方案8】:
一个类有 1 个或多个构造函数。如果您不提供一个,编译器将创建一个空的: 当您说“new 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()'
【讨论】:
【参考方案9】:这是一个通用修复:
class Blogimerkinta
string teksti;
string[] avainsanat;
string foo="";
public Blogimerkinta(string bar)
foo=bar;
public string Teksti get; set;
public string[] Avainsanat get; set;
【讨论】:
由于 OP 需要提高他的 OOP 知识,您可以改进您的答案以添加对所涉及概念(构造函数)的解释,而不仅仅是提供有效的修复。以上是关于类不包含构造函数错误的主要内容,如果未能解决你的问题,请参考以下文章
通过将 cacheManager 迁移到构造函数注入,类不存在
Proguard - PersistenceException:构造函数与类不匹配