我现在正在学习C#并且是编程世界的初学者。 我有一本名为The Herbert Schildt的完整参考书。到目前为止它是一本好书,我正在学习方法和构造函数。
我很困惑方法和构造函数的区别。因为在书中它有几乎相同的例子。我不知道如何区分它们。 我很感激你的想法。 顺便说一句,我在这里有两个定义,我只想知道如何区分它们
感谢您的帮助
干杯
答案 0 :(得分:21)
构造函数仅在创建类的新实例时有效。这是第一个在实例上运行的方法,它必须运行,并且只运行一次。
实例上的方法一旦被创建,就可以在实例上的零次到无限次之间调用。
隐式运行构造函数。创建类的新实例时,它会自动运行。方法是明确运行的。它必须从某个外部源或类中的方法 - 或构造函数 - 调用。
构造函数旨在用于布线。在构造函数中,您希望避免执行实际工作。你基本上准备要使用的类。一种方法旨在进行实际工作。
public class MyType
{
private SomeType _myNeeds;
// constructor
MyType(SomeType iWillNeedThis)
{
_myNeeds = iWillNeedThis;
}
// method
public void MyMethod()
{
DoSomethingAbout(_myNeeds);
}
}
答案 1 :(得分:15)
构造函数是一种方法..一种在类的“构造”上被调用的特殊方法。
定义:构造函数是一个类 C ++和C#中的成员函数 与班级本身同名。
构造函数的目的是 初始化所有成员变量 创建此类的对象。 获取的任何资源,如内存 通常会发布或打开文件 在类析构函数中。
答案 2 :(得分:5)
构造函数是一种具有特殊含义的实例方法 - 特别是在使用 new 创建相应类的实例时会在内部调用它。这是关键的区别。
其他一些细微差别是构造函数必须与它所属的类具有相同的名称,并且它不能具有任何返回值,即使是void。
答案 3 :(得分:5)
创建对象时将自动调用构造函数,而必须显式调用方法。 构造函数需要与类的名称相同,而函数不必相同。 构造函数签名(标头)中没有给出返回类型。它与班级相同 构造函数体中没有return语句。
示例:
class Widget //Some Class "Widget"
{
int _size;
int _length;
// Declaring a Constructor, observe the Return type is not required
public Widget(int length)
{
this._length = length;
}
// Declaring a Method, Return type is Mandator
public void SomeMethod(int size)
{
this._size = size;
}
}
//Calling the Constructor and Method
class Program
{
static void Main()
{
//Calling the Constructor, Observe that it can be called at the time the Object is created
Widget newObject = new Widget(124);
//Calling the Method, Observe that the Method needs to be called from the New Object which has been created. You can not call it the way Constructor is called.
newObject.SomeMethod(10);I
}
}
答案 4 :(得分:4)
请注意,构造函数的材质是方法。它意味着构造函数是一种特殊类型的方法,它的名称与类完全相同,但没有输出paramether.Constructor是在从类创建对象时调用的。
Public class person()
{
public person()
{
}
}
答案 5 :(得分:3)
构造函数方法名称与类名称相同。此外,它没有返回类型。或者,如果愿意,构造函数方法本身没有名称,但返回类型是类类型。
public class Foo
{
// Constructor
public Foo()
{ }
public void Bar()
{ }
}
答案 6 :(得分:2)
就允许他们做什么而言而言,构造函数与方法的区别并不大。方法和构造函数之间的主要概念差异是它的目的。
构造函数将对象置于有效的可用状态,并且在开头只调用一次。方法将对象从一个有效状态更改为另一个有效状态。 (好吧,有些方法只检索信息,不需要改变对象的状态。)
编辑:我觉得,特别是对于C#,上面的解释可能会让人感到困惑,因为不可变对象在语言中并不是非常罕见的习语,所以OP会有很多对象遇到不会有变化的状态。复杂概念通常具有简单,优雅和错误的单行解释。
答案 7 :(得分:0)
就他们如何操作对象而言,他们的行为类似。构造函数是对象的一种方法,但它是一种特殊的方法。
它的特殊之处在于如何从外部调用它。构造函数被调用作为创建对象的过程的一部分。正常方法在对象上显式调用(在创建完成后)。
答案 8 :(得分:0)
类不变量
类负责保留不变量 - 即:类为调用者提供保证,例如“object.weight
永远不会消极”,“列表中没有重复项名称“等。
方法操纵现有对象,因此可以依赖方法入口处保证的类不变量。方法需要确保它将有效状态转换为另一个有效状态。
构造函数从空中拉出对象,因此必须创建不变量。
对象存在
当构造函数抛出异常时,假定该对象从未存在过。因此,例如,终结者将永远不会运行。 C#中的后果相比较弱,它们在具有确定性破坏的语言中更为突出,例如C ++。
答案 9 :(得分:0)
构造函数是特殊类型的方法。每当在内存中创建一个新对象时,就会自动调用此方法。此外,构造函数没有任何返回类型,而其他方法具有返回类型。
答案 10 :(得分:0)
Constructer是初始化类字段的类的特殊方法。 Constucter名称与类名相同。它没有返回类型。创建实例时,调用时间构造函数。如果开发人员无法定义构造函数,则无法分配构造函数内存,然后调用隐式构造函数,并使用固定值或数据类型的默认值初始化字段。
答案 11 :(得分:0)
在C#中,在类实例化时调用构造函数。它没有返回类型,因为它不返回任何内容。我通常用它来实例化需要对象引用的类属性,比如Collection对象,自定义对象(类),需要实例化的其他对象。程序员不需要编写C#构造函数。如果你不写一个,编译器将自动生成一个,然后调用它。
构造函数也可以重载。所以你可以有几个构造函数,每个构造函数都有不同的参数如果你碰巧重载了构造函数,请确保包含一个没有参数的空构造函数,以防有任何调用该类没有传递任何参数。
public class MyClass {
public List<int> MyIntList { get; set; }
MyClass() {
}
MyClass(int i) {
MyIntList = new List<int>();
MyIntList.Add(int i);
}
}
答案 12 :(得分:0)
除了以前的技术答案外,构造函数还应提供必要的最小初始化,以确保您可以使用该特定的类(即对象),此外,构造函数还应使类自足。
所以我们设计,编写的所有代码都是为了解决实际问题。因此,如果您想阅读,可能需要至少有一本书。因此,如果Read
是您的课程,则可能要在此初始化书籍列表。因此,书籍可以是静态数据,也可以是XML或任何其他来源的数据。
答案 13 :(得分:-1)
构造函数是特殊方法,用于使用不同的签名/参数初始化类成员