十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
从本文开始我们就要进入C#冷知识的学习啦,在此过程中,我们将由易到难的介绍C#的各种冷知识,都是我总结的满满的干货,希望你们看得开心,同时有任何问题都可以留言与我交流,那么就开始吧!
创新互联主要从事网站设计、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务镇赉,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220在字段中,可以不显式的初始化变量,会自动给默认值
在方法中,不显式初始化的变量直接用就会报错。
private static int i;
public static void run()
{
int j;
//可以这么写
Console.WriteLine("未初始化的字段:" + i.ToString());
//下面的写法直接会报错,编译不通过
//Console.WriteLine("未初始化的变量:" + j.ToString());
}
使用括号的强制类型转换如果出错会抛出异常,推荐使用is as进行类型的判断和转换。
double.PositiveInfinity 正无穷
double.NegativeInfinity 负无穷
double.NaN 非数值类型(在WPF中标识Auto)
区分这两个可以不用死记硬背,从原理的方面去理解:
C#区分引用类型和值类型的原因是为了得到更好的性能,值类型在栈中,引用类型在堆中。
为什么需要引用类型? 因为有一些类型可能很大,很占内存,这时候就用引用类型。
所以 C#中引用类型为 Object 和 string 这两个都有可能无限增大
结构体是值类型,类是引用类型,所以结构体分配空间在栈上 类分配空间在堆上,结构体的性能更高
由于栈是系统分配空间和释放的,所以结构体不能有析构函数
结构体初始化字段的时候不能给初始值,原因是:结构体的默认无参构造函数是被“锁定”的。看下面的例子:
// 结构体的默认无参构造函数被“锁定”
public struct Structure
{
private int i;
// 正确
public Structure(int i)
{
this.i = i;
}
// 报错
public Structure()
{
this.i = 0;
}
}
思考: 一个还是两个?
public class StructureMethod
{
private int i;
public StructureMethod(int i)
{
this.i = i;
}
}
public struct Structure
{
private int i;
public Structure(int i)
{
this.i = i;
}
}
// 使用
// 错误写法
StructureMethod sm = new StructureMethod();
// 正确写法
Structure s = new Structure();
看上面的代码,在初始化类的时候,只能使用一个参数的构造函数实例化对象,而实例化结构体却能使用两个构造函数来实例化,同样说明了结构体锁定默认构造函数的事实。
实际应用
因为栈空间小,速度快,利用这个特点,结构体可以用于轻量级对象,用以提升效率,例如,矩形,颜色,点等用结构体就可以提升效率。或者在使用的时候,遇到传值的场景,希望拷贝一份进行传递,不像传递引用,这时候用结构体就会方便很多。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。