首先调用哪个 - 基础构造函数或"其他东西"?
public class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extrainfo) : base(message)
{
//other stuff here
}
}
Run Code Online (Sandbox Code Playgroud) 如果使用以下语法链接构造函数调用:
public frmConfirm(): this(1)
Run Code Online (Sandbox Code Playgroud)
何时重载的构造函数被调用?此外,有人可以确认,如果类是一个表单,在两个构造函数中调用InitializeComponent()会产生问题吗?
VS2005中的C#:如果一个类有两个构造函数,那么这些构造函数分享一些代码的最佳方法是什么?
例如.我怎么能避免在以下两个构造函数中使用x = 5和y = 10行:
public class MyObject {
int x;
int y;
int z;
public MyObject() {
x = 5;
y = 10;
}
public MyObject(int setZ) {
x = 5;
y = 10;
z = setZ;
}
Run Code Online (Sandbox Code Playgroud) 所以我有一个有很多孩子的基类.此基类定义一些具有默认值的只读属性和变量.这些可能会有所不同,具体取决于孩子.
Readonly属性/字段允许您更改构造函数内部变量的值以及定义,但不能更改其他地方.如果我尝试在子类的构造函数中更改继承的只读变量的值,我会得到一个'readonly变量只能在构造函数中赋值'错误.为什么这样,如果没有反射,我该如何解决这个问题呢?
我的意图:允许用户通过脚本进行扩展,他们只能更改某些字段一次.
可能重复:
C#构造函数执行顺序
class Foo
{
public int abc;
Foo()
{
abc = 3;
}
}
class Bar : Foo
{
Bar() : base()
{
abc = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,当创建Bar的对象时,BarObject.abc的值是多少?基础构造函数是第一个调用,还是Bar()运行,/ then/base()构造函数?
我只是在C#中读取继承,其中我遇到了构造函数,并且编写了构造函数按派生顺序执行.它是什么意思?将首先调用该基类构造函数或派生类.
在C#中,我使用的常见模式是使用表单对象填充较低计算类的详细信息.
MyForm的构造函数是:
MyForm()
{
_MyFormCalcs = new MyFormCalcs(this);
}
Run Code Online (Sandbox Code Playgroud)
但是我今天遇到了一个错误,这让我觉得当我的构造函数没有完成时,它会创建一个新的MyForm实例来传递给MyData.因此它调用构造函数两次.我发现MyFormCalcs中的静态列表被填充两次并且第二次失败,因为密钥已经存在于列表中.
我可以在构造函数中使用它来引用此实例吗?它在低级类中包含什么 - 是否运行了构造函数.
将表格传递给下层阶级的更好方法是什么?
public class RegisterViewModel{
public RegisterViewModel()
{
MaxDepartmentLevel = db.Settings.Find(1).MaxDepartmentLevel;
}
private ApplicationDbContext db = new ApplicationDbContext();
public int MaxDepartmentLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这安全吗?能否保证db会在行之前初始化
MaxDepartmentLevel = db.Settings.Find(1).MaxDepartmentLevel;跑步?
换句话说,具有字段初始化和构造函数的类的执行顺序是什么?
通常,构造函数是在实例化时在类中执行的第一件事.
但是在下面的例子中,首先执行类的成员方法然后执行构造函数.
为什么会这样?
代码场景:
namespace AbsPractice
{
class Program
{
static void Main(string[] args)
{
SavingsCustomer sc = new SavingsCustomer();
CorporateCustomer cc = new CorporateCustomer();
}
}
public abstract class Customer
{
protected Customer()
{
Console.WriteLine("Constructor of Abstract Customer");
Print();
}
protected abstract void Print();
}
public class SavingsCustomer : Customer
{
public SavingsCustomer()
{
Console.WriteLine("Constructor of SavingsCustomer");
}
protected override void Print()
{
Console.WriteLine("Print() Method of SavingsCustomer");
}
}
public class CorporateCustomer : Customer
{
public CorporateCustomer()
{
Console.WriteLine("Constructor …Run Code Online (Sandbox Code Playgroud)