c# 构造函数中赋值算不算初始化

请问下在构造函数中给某个成员变量赋值算不算初始化。为什么readonly 的变量可以在构造函数中赋值两次!
如下:
class MyClass
{
public readonly int a=44;

public MyClass()
{
a = 1;
a = 2;
}

}

兄弟,构造的概念是什么? 就是初始化类的属性。
那你说算不算初始化? readonly属性本来就是只可以赋值一次。
不过出于构造的特殊性(初始化类的属性,所以构造中赋值,你在其他位置赋值这个属性时报错信息会告诉你,只读属性不能赋值,构造或初始化变量除外,也就是当初在设计这个readonly时就已经设定好了只有构造和初始化时才能赋值)追问

初始化编译的时候进行,构造函数运行的时候进行,我一直认为理解为构造函数不是初始化,是不是理解错了,请求详细解惑下!

追答

基础怎么学的
引用百科的话
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载

构造通俗点理解,new一个类new的就是构造,什么叫new?实例化一个新的东西,那你new的是构造,那构造不是初始化吗? 构造就是用来初始化一个类的。他没有别的作用。你不能把别的代码放进去。那样不科学(不规范)。
实际上对于一个类来说,总会有一些成员变量需要赋值,那赋值最好的地方就是构造。

追问

那么请问下,初始化是不是说也可以在运行的时候进行,而不只是在编译的时候进行!

追答

是的。初始化的意义是什么? 你的类什么时候被创建? 是你项目运行时类就创建了吗?不是吧,是你使用了New关键字时才创建。 除非是静态的,静态都是你以启动项目就加载到内存里了

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-25
readonly在代码中只能在字段初始化器和构造函数中赋值,并不是说readonly只能赋值一次,超出这个范围以后readonly就不能通过代码修改了,但是还是可以用反射来修改,readonly仅仅是提示编译器在其他地方赋值的时候编译错误而已本回答被网友采纳
第2个回答  2012-10-25
算的!!!!构造函数的作用就是是的定义的类实例的时候做一些基本的初始化,,值类型的也有构造函数比如 int a =new int(5)等于int a=5追问

初始化不应该是编译的时候执行的么,构造函数是运行时执行的啊!我一直是这么理解的,我理解错了?

追答

构造函数有两种一种是静态构造函数那个是在编译的时候就创建初始化!!还有一种是非静态的在创建对象的时候创建初始化!!

追问

请问下,你的意思是初始化有在编译的时候进行,而有的在运行时进行。初始化和赋值是一个意思么!

第3个回答  2012-10-25
声明后第一次赋值就叫初始化,明显后面两次赋值都不算
第4个回答  2012-11-06
可以赋值无数次,只要在构造函数内就可以
相似回答