精华内容
下载资源
问答
  • 为字段设置初始值

    千次阅读 2020-04-11 01:18:14
    在开发中为字段设置初始值这是最基本的要求,但是很多开发人员会在构造函数变多的时候忘记给成员变量设置初始值。为了避免这个问题,我们最好在声明的时候直接初始化,而不是在实现构造函数的时候去初始化。编译器会...

    在开发中为字段设置初始值这是最基本的要求,但是很多开发人员会在构造函数变多的时候忘记给成员变量设置初始值。为了避免这个问题,我们最好在声明的时候直接初始化,而不是在实现构造函数的时候去初始化。编译器会帮助开发人员在每个构造函数开头放入一段代码,这段代码会把开发人员在定义成员字段时所指定的初始值设置给这些成员字段。如果没有显示定义构造函数,那么编译器就会先创建默认构造函数,之后再向其中加入初始化代码。

    虽然通过初始化语句可以避免忘记给成员变量设置初始值,但是这并不是在任何情况下都可以使用的。在 C# 中有三种情况是不可以使用初始化语句的。

    1. 把对象初始化为 0 或者 null
      系统在运行开发人员编写的代码前会执行本身的初始化逻辑,系统本身的初始化逻辑会把相关的内容设置为 0 ,这个初始化逻辑是由处理器指令来进行的,这些指令会将要使用到的内存块全部设置为 0 。如果我们将对象初始化为 0 或者 null 时,编译器就会在执行完系统本身的初始化逻辑后,将经由系统初始化过的内容清零。例如下面这段代码:
    public struct Demo
    {
        // more code
    }
    Demo demo1;
    Demo demo2 = new Demo();
    

    在上面的代码中 demo1 是经过系统进行初始化的,系统将 demo1 所在的内存块设置为了 0,而 demo2 是通过 IL 指令来进行清零的,这样就会出发装箱和拆箱操作,进而初始化会花费多一点的时间。
    2. 不同构造函数按照自己的方式初始化字段
    初始化语句只适合初始化逻辑不变的情况下,如果需要在不同的构造函数中使用不同的初始化逻辑,那么这种方式就不管用了。我们来看一个例子。

    public class Demo
    {
        List<int> list = new List<int>();
        public Demo()
        {
        }
        public Demo(int length)
        {
            list = new List<int>(length);
        }
    }
    

    上述代码中我们在声明变量的时候进行了初始化,但是第二个构造函数通过传入一个整数来指定集合的长度,这时我们的程序就创建了两个 list ,只不过第一个 list 在创建出来之后会被后创建的 list 取代掉(字段初始化语句优先于构造函数执行)。
    3. 初始化变量过程中有可能引入异常
    在部分情况下初始化变量的过程有可能会出现异常,这时我们就不能使用初始化语句来设置初始值,应该将初始化逻辑放在构造函数里,并在构造函数里捕捉异常并处理,

    展开全文
  • 问题:字段初始值设定项无法引用非静态字段、方法或属性的问题下面代码出错的原因,在类中定义的字段什么不能用? public class Test { public Test() { } public int Age=23; public int temp = Age;//...

    问题:字段初始值设定项无法引用非静态字段、方法或属性的问题

    下面代码出错的原因,在类中定义的字段为什么不能用?
    public class Test
    {
    public Test()
    {
    }
    public int Age=23;
    public int temp = Age;//ERROR 字段初始值设定项无法引用非静态字段、方法或属性
    }

    C#规定在类内部只能定义属性或者变量,并初始化,不能直接变量引用变量。

    在初始化类实例之前就调用了字段

    c# 中字段的初始化先于构造函数。

    string y = “asdf” + x; 实际上是 y = “asdf” + this.x;

    因为这时this还没被初始化,所以编译会报错。

    属性内存和变量内存的分配的时间不一样。
    属性是用的时候分配,变量是在类初始化时候分配。

    展开全文
  • ALTER TABLE maomao_table AUTO_INCREMENT =1000000000

    ALTER TABLE maomao_table  AUTO_INCREMENT =1000000000

    展开全文
  • 问题:字段初始值设定项无法引用非静态字段、方法或属性的问题 下面代码出错的原因,在类中定义的字段什么不能用? (1) public string text = test(); //提示 字段或属性的问题字段初始值设定项无法引用非静态...

    问题:字段初始值设定项无法引用非静态字段、方法或属性的问题

    下面代码出错的原因,在类中定义的字段为什么不能用?
    (1)

    public string text = test(); //提示 字段或属性的问题字段初始值设定项无法引用非静态字段、方法
        protected void Page_Load(object sender, EventArgs e)
        { 
        }
    
        public string test()
        { return ""; }
    }
    

    (2)

     public class modbusThreadClass
      {
      SerialPort sp = new SerialPort();
            PlcControl plc = new PlcControl(sp,Dev_IP_param.comPort, Dev_IP_param.plcBaudRate);
            Collector_8961F2_Control collctor_8961F2 = new Collector_8961F2_Control(sp,Dev_IP_param.comPort, Dev_IP_param.collectorBaudRate);
    
            public modbusThreadClass()
            {
            }
    }
    

    C#规定在类内部只能定义属性或者变量,并初始化,不能直接变量引用变量。

    在初始化类实例之前就调用了字段

    c# 中字段的初始化先于构造函数。

    string y = “asdf” + x; 实际上是 y = “asdf” + this.x;

    因为这时this还没被初始化,所以编译会报错。

    属性内存和变量内存的分配的时间不一样。
    属性是用的时候分配,变量是在类初始化时候分配。

    二、可以使用一下两种方法修改:
    (1)可以通过属性方式调用:

    public string text = test(); //提示 字段或属性的问题字段初始值设定项无法引用非静态字段、方法
        protected void Page_Load(object sender, EventArgs e)
        { 
        }
    
        public string test()
        { return ""; }
    

    (2)使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型

    static SerialPort sp = new SerialPort();
            PlcControl plc = new PlcControl(sp,Dev_IP_param.comPort, Dev_IP_param.plcBaudRate);
            Collector_8961F2_Control collctor_8961F2 = new Collector_8961F2_Control(sp,Dev_IP_param.comPort, Dev_IP_param.collectorBaudRate);
    

    静态全局变量

    定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量。

    特点:
      A、该变量在全局数据区分配内存。
      B、初始化:如果不显式初始化,那么将被隐式初始化为0。

    静态局部变量

    定义:在局部变量前加上static关键字时,就定义了静态局部变量。

    特点:
      A、该变量在全局数据区分配内存。
      B、初始化:如果不显式初始化,那么将被隐式初始化为0。
      C、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或 语句块结束时,其作用域随之结束。

    静态数据成员
    特点:
      A、内存分配:在程序的全局数据区分配。
      B、初始化和定义:
        a、静态数据成员定义时要分配空间,所以不能在类声明中定义。
        b、为了避免在多个使用该类的源文件中,对其重复定义,所在,不能在类的头文件中
        定义。
        c、静态数据成员因为程序一开始运行就必需存在,所以其初始化的最佳位置在类的内部实现。
      C、特点
        a、对相于 public,protected,private 关键字的影响它和普通数据成员一样,
        b、因为其空间在全局数据区分配,属于所有本类的对象共享,所以,它不属于特定的类对象,在没产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它。
       
     D、访问形式
        a、 类对象名.静态数据成员名
       
     E、静态数据成员,主要用在类的所有实例都拥有的属性上。比如,对于一个存款类,帐号相对   于每个实例都是不同的,但每个实例的利息是相同的。所以,应该把利息设为存款类的静态数据成员。这有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局区的内存,所以节省存贮空间。第二,一旦利息需要改变时,只要改变一次,则所有存款类对象的利息全改变过来了,因为它们实际上是共用一个东西。

    静态成员函数
    特点:
      A、静态成员函数与类相联系,不与类的对象相联系。
      B、静态成员函数不能访问非静态数据成员。原因很简单,非静态数据成员属于特定的类实例。
    作用:
      主要用于对静态数据成员的操作。

    调用形式:
      A、类对象名.静态成员函数名()

    展开全文
  • 字段初始值无法引用非静态字段、方法或属性 刚学习C#时,在类内定义变量时,经常会出现标题内容的问题,即字段初始值无法引用非静态字段、方法或属性。这是什么呢? 下面我们拿一个小程序来举例子。关于的...
  • Sqlite3的自增长字段设置为初始值0

    千次阅读 2011-09-08 08:39:19
    sqlite3记录被清除之后,如果表中有自增长字段,下次再插入数据,会继续延续之前自增长字段的历史记录。 清除方法: 在Sqlite3建立带自增长字段的表时,Sqlite3会创建这个表存放自增长序列: “sqlite_...
  • 字段初始值设定项无法引用非静态字段、方法或属性   如 int i= 此值是用来初始化字段i的 不能使用非静态字段   [c-sharp] view plaincopyprint? //错误 int j=5; int i=j ; //此行报出此...
  • MySQL创建自增字段,并设置初始值

    万次阅读 2018-06-28 17:50:56
    创建自增字段create table table_name (id INT AUTO_INCREMENT PRIMARY KEY );更改初始值alter table table_name AUTO_INCREMENT=100
  • sql 增加非空字段设置初始值

    千次阅读 2015-10-10 12:34:46
    要向表"table1" 中增加一个字段“test” ,字段类型int,要求以后向表中插入数据时,该字段不能空;而且已有的数据中,该字段都是“1”: ALTER TABLE 'table1' ADD COLUMN 'test' NOT NULL DEFAULT 1;
  • 修改方式:把这个语句放到静态方法当中,即:static void Main (string[] args){ } BUG如下图所示: BUG修复后:
  • //如果是说结构体字段有默认的初始值,不能内联初始化,但是什么这里又可以初始化呢? } public void showInfo() { Console.WriteLine("hahahha!"); } } Information info1 = new ...
  • 字段初始值设定项无法引用非静态字段、方法或属性 如int i= 此值是用来初始化字段i的 不能使用非静态字段 //错误int j=5;int i=j ; //此行报出此编译错误 正确int i=5 //或static int j=5;int i=j
  • 这可能是很多人都问过的问题,下面就您举例说明sqlserver建表时设置字段初始默认值的方法,供您参考。 --sqlserver建表时设置字段初始默认值完整的示例 --创建表时设置字段的默认值 create table 表(id int,...
  • 实例字段不能用于初始化方法之外的其他实例字段。...c#中编译器规定了,在声明(仅仅是声明,而不是执行)初始值时,是不允许使用其它变量的。可以放在构造函数中赋值,或者定一个静态变量,这个变量赋值。
  • mysql设置自动增加字段初始值

    千次阅读 2012-11-06 23:59:09
    注意n只能大于已有的auto_increment的整数,小于的无效. show table status like 'table_name' 可以看到auto_increment这一列是表现有的. 步进没法改变.只能通过下面提到last_inset_id()函数变通使用 在...
  • .net 提示错误如上,原因是在类的属性中把继承了某个接口的对象赋值给了此接口 解决方法 在属性的get方法或函数体内进行赋值
  • DBCC CHECKIDENT('tb', RESEED, 20000) (设置当前的id为20000,下一条插入的记录值为20001) insert into tb select 1004 union all select 1005 union all select 1006 union all select 1007 ...
  • 什么 ...//提示错误,字段初始值无法引用非静态字段、方法.... public void test() { //这里就可以 int q=4; int p=q; } } 另外在Java里,就没有以上的错误提示,谢谢高人指点
  • 给非数据字段初始值

    千次阅读 2010-09-07 00:45:00
    在ADF的开发过程中,经常会遇到给一些非数据字段赋初始值,如果对于一个调查问卷的功能,要求在进入页面时候,要给“是否满意”字段初始值为“满意”,但是“是否满意”字段是一个非数据字段,是从lookups里面根据...
  • 突然项目中给我说,新加一个字段完了,又要我初始化,然后我以为Navicat可以替我初始化给默认值,结果没有设置成功,不知道是不是我操作不对,于是想通过sql语句批量处理一下; 然后发现竟是这个问题;添加该字段由...
  • 重置Mysql中auto_increment字段初始值

    千次阅读 2007-02-15 23:21:00
    ALTER TABLE tablename AUTO_INCREMENT=1
  • 初始值设置项里有未知的字段ndo_change_mtu 经网上搜索,发现是新版本内核文件修改的问题 打开终端,查找内核中的头文件,命令如下 find /-name netdevice.h 搜索结果有三个,如下 /u...
  • 使用sybase时将id字段设置为identity属性,即为自增。...with identity_gap = 1 on 'default'可以设置跳跃值为1。 set identity_insert test_table on 手工插入identity的值 1000 再插入一条id就是1
  • SQL Server改变自增列字段初始值

    千次阅读 2012-08-29 15:32:16
    改变自增字段初始值 1。identity 函数中不能用变量作参数 declare @a int select @a=190 select identity(int,@a,1) as id,* into #temp from tablename select * from #temp 上述不正确,可以用如下方法 ...
  • 在一个事件过程中使用了this,编译时报错如题。 static void Label_click(object sender, EventArgs e) { string title=this.Name; } 研究了两天,终于发现,只要把上面那个static删除就万事大喜了。
  • oracle设置字段值递增

    千次阅读 2017-10-18 16:48:37
    oracle设置字段递增,相对mysql比较麻烦: mysql需要选择自动递增,但oracle需要创建序列和触发器 1、创建一个表create table T_RPT_TPYE_USER( USER_ORDER_ID int , DeptNo number, EmpNo number, Ename...
  • 今天特意测试了access的自增长字段的修改,发现原来access自增长比起sql server的标识列有一定的灵活性。比如access的自增长字段可以直接insert记录时指定数值,但是不要和已经有的记录的该字段值重复了,...
  • 弄清楚这个概念后 就是结构和类了 结构直接存在栈区 所以栈区直接有和地址 在运行时是直接调用的 所以如果没有就会空指针异常. 所以 没有初始设定项 必须一开始直接赋值 . 结构中我记得不能写类. 如果能写就是...
  • Navicat中设置主键自增和自增初始值

    万次阅读 2018-03-31 14:50:14
    1、设置主键自增2、设置主键自增初始值

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 431,877
精华内容 172,750
关键字:

如何设置字段初始值为只