![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
C#的一些基础问题
//为什么只读字段不能在方法中声明而常量可以,是因为只读字段是字段的原因吗?//编译器是否为静态类隐式提供了一个构造函数,如果是,那这个构造函数是静态的吗?//静态类为什...
//为什么只读字段不能在方法中声明而常量可以,是因为只读字段是字段的原因吗?
//编译器是否为静态类隐式提供了一个构造函数,如果是,那这个构造函数是静态的吗?
//静态类为什么不用new运算符就可以操作方法和属性,它是否也属于值类型?
//"静态类在功能上与使用私有静态构造函数创建的类相同" 这句话怎么理解?
谢谢大家的悉心回答,(悬赏已追加)另:
静态构造函数为什么不用实例化就能为其字段赋值?
只读字段是指readonly关键字修饰的类的成员变量,我不是指只读属性,请知悉! 展开
//编译器是否为静态类隐式提供了一个构造函数,如果是,那这个构造函数是静态的吗?
//静态类为什么不用new运算符就可以操作方法和属性,它是否也属于值类型?
//"静态类在功能上与使用私有静态构造函数创建的类相同" 这句话怎么理解?
谢谢大家的悉心回答,(悬赏已追加)另:
静态构造函数为什么不用实例化就能为其字段赋值?
只读字段是指readonly关键字修饰的类的成员变量,我不是指只读属性,请知悉! 展开
4个回答
展开全部
静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。
类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载。
使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。
静态类的主要功能如下:
它们仅包含静态成员。
它们不能被实例化。
它们是密封的。
它们不能包含实例构造函数(C# 编程指南)。
因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。
使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。
静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。
http://msdn.microsoft.com/zh-cn/library/79b3xss3(VS.80).aspx
静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
class SimpleClass
{
// Static constructor
static SimpleClass()
{
//
}
}
在使用静态构造函数的时候应该注意几点:
1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
3、一个类只能有一个静态构造函数。
4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
5、最多只运行一次。
6、静态构造函数不可以被继承。
7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
总之,他们都是在使用前由CLR自动加载,不是使用new关键字来创建。以我的理解,他们在生成的时间顺序上应该是在同一水平线上。
------------------------------------------------------------------------------------------------------
有静态构造函数的类在程序加载时已经实例化,由上所述,他在整个生命周期中存在的比较早,当我们的普通类实例化的时候有静态构造函数的类已经存在,所以可以直接赋值。
为什么只读字段不能在方法中声明而常量可以?
只读字段是readonly关键字修饰的字段,只读字段在运行过程中也能被修改,只读字段可以在声明或构造函数中初始化,因此,根据所使用的构造函数,readonly 字段可能具有不同的值。如果你在方法中声明,就不符合这个规则。
具体关于C# 中readonly字段的分析请参考这篇文章:
类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载。
使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。
静态类的主要功能如下:
它们仅包含静态成员。
它们不能被实例化。
它们是密封的。
它们不能包含实例构造函数(C# 编程指南)。
因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。
使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。
静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。
http://msdn.microsoft.com/zh-cn/library/79b3xss3(VS.80).aspx
静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
class SimpleClass
{
// Static constructor
static SimpleClass()
{
//
}
}
在使用静态构造函数的时候应该注意几点:
1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
3、一个类只能有一个静态构造函数。
4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
5、最多只运行一次。
6、静态构造函数不可以被继承。
7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
总之,他们都是在使用前由CLR自动加载,不是使用new关键字来创建。以我的理解,他们在生成的时间顺序上应该是在同一水平线上。
------------------------------------------------------------------------------------------------------
有静态构造函数的类在程序加载时已经实例化,由上所述,他在整个生命周期中存在的比较早,当我们的普通类实例化的时候有静态构造函数的类已经存在,所以可以直接赋值。
为什么只读字段不能在方法中声明而常量可以?
只读字段是readonly关键字修饰的字段,只读字段在运行过程中也能被修改,只读字段可以在声明或构造函数中初始化,因此,根据所使用的构造函数,readonly 字段可能具有不同的值。如果你在方法中声明,就不符合这个规则。
具体关于C# 中readonly字段的分析请参考这篇文章:
展开全部
是的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为什么只读字段不能在方法中声明而常量可以,是因为只读字段是字段的原因吗?
变量不建议声明只读,想只读!用私有,并为它设置 属性!设置GET 属性,而不设置SET属性就好! private string a;
public string AA{return a; }
是的
new 就是实例化,静态类不可被实例化! 类属于引用类型
静态构造函数
静态类可以有静态构造函数,静态构造函数不可继承。
静态构造函数可以用于静态类,也可用于非静态类。
静态构造函数无访问修饰符、无参数,只有一个 static 标志。
静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。
变量不建议声明只读,想只读!用私有,并为它设置 属性!设置GET 属性,而不设置SET属性就好! private string a;
public string AA{return a; }
是的
new 就是实例化,静态类不可被实例化! 类属于引用类型
静态构造函数
静态类可以有静态构造函数,静态构造函数不可继承。
静态构造函数可以用于静态类,也可用于非静态类。
静态构造函数无访问修饰符、无参数,只有一个 static 标志。
静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
光看书不行,你找两个代码跑下,一个静态类,一个私有静态构造函数,看下两个执行结果有什么异同哈.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询