有两种方法可以通过构造函数或通过成员初始化来初始化C#类中的成员
有两种方法可以通过构造函数初始化C#类中的成员:有两种方法可以通过构造函数或通过成员初始化来初始化C#类中的成员,c#,asp.net,constructor,C#,Asp.net,Constructor,有两种方法可以通过构造函数初始化C#类中的成员: class MyClass{ private int Member; public MyClass() { Member = 0; } } 或通过成员初始化: class MyClass { private int Member = 0; } 我的问题:一种方法与另一种方法相比是否存在问题/好处? 从我所看到的,如果你只有一个默认的构造函数,那就太糟糕了。如果您有多个构造函数,则对于所有构造函数都设置为相同值的成员
class MyClass{
private int Member;
public MyClass()
{
Member = 0;
}
}
或通过成员初始化:
class MyClass
{
private int Member = 0;
}
我的问题:一种方法与另一种方法相比是否存在问题/好处?
从我所看到的,如果你只有一个默认的构造函数,那就太糟糕了。如果您有多个构造函数,则对于所有构造函数都设置为相同值的成员,成员初始化更可取。在这个特定示例中,没有区别。构造函数主体中的初始化主要是为了根据构造函数参数和/或其他自定义逻辑动态设置值。在这种情况下,编译器将生成第一个案例,我相信即使原始源代码是第二个 否则就是风格和/或重复
就个人而言,我更喜欢在构造函数体中初始化,除非我有多个构造函数,并且让构造函数调用其他构造函数是不合适的。在这个特定示例中,没有区别。构造函数主体中的初始化主要是为了根据构造函数参数和/或其他自定义逻辑动态设置值。在这种情况下,编译器将生成第一个案例,我相信即使原始源代码是第二个 否则就是风格和/或重复
就个人而言,我更喜欢在构造函数体中初始化,除非我有多个构造函数,并且让构造函数调用其他构造函数是不合适的。在这个特定示例中,没有区别。构造函数主体中的初始化主要是为了根据构造函数参数和/或其他自定义逻辑动态设置值。在这种情况下,编译器将生成第一个案例,我相信即使原始源代码是第二个 否则就是风格和/或重复
就个人而言,我更喜欢在构造函数体中初始化,除非我有多个构造函数,并且让构造函数调用其他构造函数是不合适的。在这个特定示例中,没有区别。构造函数主体中的初始化主要是为了根据构造函数参数和/或其他自定义逻辑动态设置值。在这种情况下,编译器将生成第一个案例,我相信即使原始源代码是第二个 否则就是风格和/或重复
就个人而言,我更喜欢在构造函数体中初始化,除非我有多个构造函数,并且让构造函数调用其他构造函数是不合适的。就程序的执行而言,您给出的两个示例是相同的。类中的成员初始化表达式执行时“好像”它们是构造函数的一部分(无论哪种方式,IL都是相同的),因此这完全是风格问题 内联初始值设定项通常更方便,如果您查看现有的C#代码,您可能会看到它。通常,构造函数主体中的初始值设定项仅在必要时使用,例如:
- 如果需要使用仅在运行时已知的数据计算初始值,例如构造函数参数
- 如果您需要(出于某种原因)以不同于代码中显示的顺序初始化值
- 如果需要有条件地初始化某些字段
static
时。例如,如果包含初始化静态字段的静态构造函数,则FxCop将生成CA1810或CA2207。在这些情况下,内联和构造函数体样式之间存在差异,尽管这是相当技术性的(请参阅详细信息的解释)。这里的建议是避免使用构造函数:如果需要,使用静态成员函数初始化静态字段,称为内联:
// Don't do this:
public static class Foo
{
private static int i;
static Foo()
{
i = somecomputedvalue;
}
}
// Do this:
public static class Foo
{
private static int i = initializeI();
private static int initializeI()
{
return somecomputedvalue;
}
}
就程序的执行而言,您给出的两个示例是相同的。类中的成员初始化表达式执行时“好像”它们是构造函数的一部分(无论哪种方式,IL都是相同的),因此这完全是风格问题 内联初始值设定项通常更方便,如果您查看现有的C#代码,您可能会看到它。通常,构造函数主体中的初始值设定项仅在必要时使用,例如:
- 如果需要使用仅在运行时已知的数据计算初始值,例如构造函数参数
- 如果您需要(出于某种原因)以不同于代码中显示的顺序初始化值
- 如果需要有条件地初始化某些字段
static
时。例如,如果包含初始化静态字段的静态构造函数,则FxCop将生成CA1810或CA2207。在这些情况下,内联和构造函数体样式之间存在差异,尽管这是相当技术性的(请参阅详细信息的解释)。这里的建议是避免使用构造函数:如果需要,使用静态成员函数初始化静态字段,称为内联:
// Don't do this:
public static class Foo
{
private static int i;
static Foo()
{
i = somecomputedvalue;
}
}
// Do this:
public static class Foo
{
private static int i = initializeI();
private static int initializeI()
{
return somecomputedvalue;
}
}
就程序的执行而言,您给出的两个示例是相同的。类中的成员初始化表达式执行时“好像”它们是构造函数的一部分(无论哪种方式,IL都是相同的),因此这完全是风格问题 内联初始值设定项通常更方便,如果您查看现有的C#代码,您可能会看到它。大多数情况下,构造函数体中的初始值设定项