C# 关于c语言中的构造函数和方法#

C# 关于c语言中的构造函数和方法#,c#,java,C#,Java,使用构造函数而不是方法初始化的原因是什么 代码1: class A { int x, y; public A() { x = 10; y = 4; } } 代码2: class A { int x, y; public fun() { x = 10; y = 4; } } 从上面看,代码1和代码2的区别是什么。 如果有人知道答案,请澄清我的疑问。第一个赋值发生在创建实例时。当执

使用构造函数而不是方法初始化的原因是什么

代码1:

class A {
    int x, y;

    public A() {
        x = 10;
        y = 4;
    }
}
代码2:

class A {
    int x, y;

    public fun() {
        x = 10;
        y = 4;
    }
}
从上面看,代码1和代码2的区别是什么。
如果有人知道答案,请澄清我的疑问。

第一个赋值发生在创建实例时。当执行
fun()
方法时,会发生第二个赋值


顺便说一句,您可以在构造函数中调用
fun()
方法。

第一个赋值发生在创建实例时。当执行
fun()
方法时,会发生第二个赋值


顺便说一句,您可以在构造函数中调用
fun()
方法。

当使用代码1时,
A=newa()将初始化x和y

使用代码2时,需要
A A=newa()
a.fun()到初始x和y

如果您想在以后的某个时间将此方法用于其他Init,则应将变量的Init放在一个方法中


顺便说一句,fun不是方法的适当名称。

当使用代码1时,
a=newa()将初始化x和y

使用代码2时,需要
A A=newa()
a.fun()到初始x和y

如果您想在以后的某个时间将此方法用于其他Init,则应将变量的Init放在一个方法中


顺便说一句,fun不是一个合适的方法名称。

构造函数确保对象被正确实例化。不能保证调用方将调用该方法来手动实例化对象。

构造函数确保对象被正确实例化。无法保证调用方将调用该方法来手动实例化该对象。

在创建对象时隐式调用构造函数。在第二种情况下,该方法是实例级方法。。您必须创建类型为A的对象,然后“更改”x和y的值。。。defualt构造函数将为您的int变量指定默认值(0)…

当创建对象时,将隐式调用构造函数。在第二种情况下,该方法是实例级方法。。您必须创建类型为A的对象,然后“更改”x和y的值。。。defualt构造函数将为您的int变量分配默认值(0)…

可以保证在创建对象时调用构造函数,但对于方法,则由您控制何时调用。如果在方法而不是构造函数中初始化值,如果在错误的时间调用该方法,则可能会产生副作用


因此,初始化构造函数中的值而不是方法始终是一种好的做法,这也是构造函数的目的。

可以保证在创建对象时调用构造函数,但在使用方法的情况下,何时调用是您的控制。如果在方法而不是构造函数中初始化值,如果在错误的时间调用该方法,则可能会产生副作用


因此,初始化构造函数中的值而不是方法始终是一种好的做法,这也是构造函数的目的。

构造函数用作初始值设定项,因为它提供了将对象初始化到内存的功能,或者在创建对象时构造函数将首先调用。如果您不单独初始化任何值,并且希望在结果中使用某些变量,则可以使用构造函数作为初始值设定项。 为什么在编码中使用构造函数?Bcz它具有在创建对象之前初始化某些东西的性质

我想你明白我的意思了。快乐学习。:)


感谢用作初始值设定项的构造函数,因为它提供了将对象初始化到内存的功能,或者在创建对象时构造函数将首先调用。如果您不单独初始化任何值,并且希望在结果中使用某些变量,则可以使用构造函数作为初始值设定项。 为什么在编码中使用构造函数?Bcz它具有在创建对象之前初始化某些东西的性质

我想你明白我的意思了。快乐学习。:)

感谢

在技术上,您可以隐藏构造函数并使用工厂方法模式:

class A {
  int x, y;

  // Hidden constructor 
  protected A() {
    x = 10;
    y = 4;
  }

  // Factory method to create A class instances
  public static A Create() {
    ...
    A result = new A();
    ...
    return result;  
  }
}
在您的示例中,工厂方法是一种超调,但它可能会有所帮助 在技术上实现单例、策略模式等时

可以隐藏构造函数并使用工厂方法模式:

class A {
  int x, y;

  // Hidden constructor 
  protected A() {
    x = 10;
    y = 4;
  }

  // Factory method to create A class instances
  public static A Create() {
    ...
    A result = new A();
    ...
    return result;  
  }
}
在您的示例中,工厂方法是一种超调,但它可能会有所帮助
在实现单例、策略模式等时

调用构造函数来创建类的实例,不依赖调用,与方法不同

调用构造函数来创建类的实例,不依赖调用,与方法不同,你在哪里调用函数?我不希望第二个类会编译(因为fun()方法没有返回类型),即构造函数必须与类同名。你在哪里调用函数?我不希望第二个类会编译(因为fun()方法没有返回类型)即,构造函数必须与类具有相同的名称