七问C#关键字const和readonly
const和readonly经常被用来修饰类的字段,两者有何异同呢?
const
1、声明const类型变量一定要赋初值吗?
--一定要赋初值
public class Student
{
public const int age;
}
生成的时候,会报如下错:
正确的应该这样写:
public class Student
{
public const int age = 18;
}
2、声明const类型变量可以用static修饰吗?
--不可以
public class Student
{
public static const int age = 18;
}
生成的时候,会报如下错:
正确的应该这样写:
public class Student
{
public const int age = 18;
}
因为const默认是static。
3、运行时变量可以赋值给const类型变量吗?
--不可以
public class Student
{
public const int age = 18; public Student(int a)
{
age = a + 1;
}
}
生成的时候,会报如下错:
const类型变量是编译期变量,无法把运行时变量赋值给编译期变量。
4、const可以修饰引用类型变量吗?
--可以,但只能给引用类型变量赋null值。
public class Student
{
public const Teacher teacher = new Teacher();
} public class Teacher
{
}
生成的时候,会报如下错:
正确的应该这样写:
public class Student
{
public const Teacher teacher = null;
} public class Teacher
{
}
readonly
5、声明readonly类型变量一定要赋初值吗?
--不一定,既可以赋初值,也可以不赋初值。
以下不赋初值的写法正确:
public class Student
{
public readonly int age;
}
以下赋初值的写法也对:
public class Student
{
public readonly int age = 18;
}
6、运行时变量可以赋值给readonly类型变量吗?
--可以
以下在构造函数中给readonly类型变量赋值是可以的:
public class Student
{
public readonly int age = 18; public Student(int a)
{
age = a;
}
}
7、声明readonly类型变量可以用static修饰吗?
--可以的
以下写法正确:
public class Student
{
public static readonly int age = 18;
}
总结
const修饰符:
● 用const修饰的变量是编译期变量
● 不能把运行时变量赋值给const修饰的变量
● const修饰的变量在声明时要赋初值
● const修饰的变量不能在前面加static修饰
● cosnt也可以修饰引用类型变量,但一定要给引用类型变量赋null初值
readonly修饰符:
● 用readonly修饰的变量是运行时变量
● 可以把运行时变量赋值给readonly修饰的变量
● readonly修饰的变量在声明时,既可以赋初值,也可以不赋初值
● readonly修饰的变量可以在前面加static修饰符
七问C#关键字const和readonly的更多相关文章
- C# 关键字const与readonly的区别
尽管你写了很多年的C#的代码,但是可能当别人问到你const与readonly的区别时候,还是会小小的愣一会吧~ 笔者也是在看欧立奇版的<.Net 程序员面试宝典>的时候,才发现自己长久以 ...
- C#关键字 const与readonly
====const==== const关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量而且不能修改.常量可以为数字.布尔值.字符串或null引用. 常数声明的类型指定声明引入的成 ...
- const 与 readonly知多少
原文地址: http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html 尽管你写了很多年的C#的代码,但是可能当别人问到你cons ...
- [转]const 与 readonly知多少
引自:http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html 尽管你写了很多年的C#的代码,但是可能当别人问到你const与r ...
- C#基础知识七之const和readonly关键字
前言 不知道大家对const和readonly关键字两者的区别了解多少,如果你也不是很清楚的话,那就一起来探讨吧!探讨之前我们先来了解静态常量和动态常量. 静态常量 所谓静态常量就是在编译期间会对变量 ...
- C#基础知识系列八(const和readonly关键字)
前言 不知道大家对const和readonly这两个关键字的区别有什么了解,原来自己之前还真不清楚它们到底是怎么回事,那么如果你也不是很清楚的话,可以一起来探讨一下.在了解这两个关键字的时候我们先来了 ...
- c# const与readonly 关键字的比较
C#中,const 与readonly是两个比较有用的关键字.const 与 readonly 定义的数据成员在初始化都不能再改变. 比如定义了 public class MathUtitlity ...
- 如何使用C#关键字const,readonly,static
如果有一个值不太会变化,我们经常使用const和readonly,这2者有何不同呢?有时候,我们也会在readonly之前加上关键字static,这又意味着什么呢? const ● const默认是静 ...
- const和readonly关键字
不知道大家对const和readonly这两个关键字的区别有什么了解,原来自己之前还真不清楚它们到底是怎么回事,那么如果你也不是很清楚的话,可以一起来探讨一下.在了解这两个关键字的时候我们先来了解一下 ...
随机推荐
- group by 并且 count(1)的linq写法
SELECT [MobleNo],count(1) FROM [CustMobleNo] group by [MobleNo] GO ===作用等于=== var rst = from c in da ...
- c 语言文本文件判断是否到达结尾的问题
在c语言中,判断文件结尾有两种方法,第一种是使用feof()函数,feof(fp)用于测试fp所指向的文件的当前状态是否为“文件结束”.如果是,函数则返回的是非0值(真),否则为0(假),要注意的是, ...
- Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件
前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果: 因为此效果实现的步骤 ...
- Ninject中如果在抽象类中使用了属性注入,则属性必须设置为protected或public
Ninject中如果在抽象类中使用了属性注入,则属性必须设置为protected或public 不能使用private,否则无法注入成功,会报null异常
- Jenkins+Docker持续集成
本节内容: Jenkins介绍 安装部署Jenkins Jenkins构建maven风格的job Jenkins邮件通知设置 Sonar Jenkins与Docker结合 一.Jenkins介绍 Je ...
- 【LOJ】 #2540. 「PKUWC2018」随机算法
题解 感觉极其神奇的状压dp \(dp[i][S]\)表示答案为i,然后不可选的点集为S 我们每次往答案里加一个点,然后方案数是,设原来可以选的点数是y,新加入一个点后导致了除了新加的点之外x个点不能 ...
- Java去重字符串的两种方法以及java中冒号的使用
package com.removesamestring; import java.io.BufferedWriter; import java.util.ArrayList; import java ...
- Ionic Js十二:导航ion-nav-view
 ion-nav-view 当用户在你的app中浏览时,ionic能够检测到浏览历史.通过检测浏览历史,实现向左或向右滑动时可以正确转换视图. 采用AngularUI路由器模块等应用程序接口可以分为 ...
- java 代码中设置 临时 环境变量
System.setProperty("hadoop.home.dir", "D:\\software\\software_install\\dev_install\\h ...
- Mysql远程连接报错:SQL Error (1130): Host '192.168.61.128' is not allowed to connect to this MySQL server
Mysql远程连接报错:SQL Error (1130): Host '192.168.0.18' is not allowed to connect to this MySQL server ...