• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#语法初始化字段

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.先看一个例子:

 class SomeType
    {
        double x = 5;
        public int Add(double a,double b)
        {
          
            return x;
        }
    }

当构造SomeType对象时他的字段将被初始化为5,这是怎样完成的呢?我们查看SomeType构造器方法(也称.ctor)的IL代码我们会看到如下的代码:

.method public hidebysig specialname rtspecialname
        instance void  .ctor() cil managed
{
  // 代码大小       15 (0xf)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  ldc.i4.5
  IL_0002:  stfld      int32 ConsoleApplication1.SomeType::x
  IL_0007:  ldarg.0
  IL_0008:  call       instance void [mscorlib]System.Object::.ctor()
  IL_000d:  nop
  IL_000e:  ret
} // end of method SomeType::.ctor
我们会看到SomeType构造器首先将5赋值给x换句话说:就是C#允许我们以内敛方式初始化实例字段的简化语法,实际上都被转化成了构造器中的语法。这意味着我们需要警惕代码的膨胀效应,试想下面的类:

class SomeType
    {
        int x = 12;
        string s = "hello world";
        double d = 12.34;
        byte b;
        //下面是一些构造器
        public SomeType()
        {

        }
        public SomeType(int x)
        {
        }
        public SomeType(string s)
        {
        }
    }

//当编译器为以上三个构造器方法产生IL代码时,每一个方法的开始处都包括x,s,和d的代码,在这些代码初始化后,编译器才为各个构造器添加出现在其中的代码。

由于上面的三个构造器都对字段进行了初始化,应当避免这种情况发生。

我们应当将这些公共的初始化语句放在一个初始化构造其中,然后用其他的构造器显式的调用这个初始化构造器。这将有助于减少代码生成的尺寸。看如下的代码:

 class SomeType
    {
        int x;
        string s;
        double d;
        byte b;
        //所有其他的构造器都必须调用下面的构造器。
        //该构造器初始化了字段
        public SomeType()
        {
             x = 12;
             s = "hello world";
             d = 12.34;
           
        }
        //下面的构造器首先调用了默认的构造器
        public SomeType(int x):this()
        {
            this.x = x;
        }
        //下面的构造器首先调用了默认的构造器
        public SomeType(string s):this()
        {
            this.s=s;
        }
    }


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中combobox控件初始化发布时间:2022-07-10
下一篇:
C#编程中的堆栈(Stack)和队列(Queue)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap