const readonly

时间:2024-03-30 02:28:56编辑:优化君

c#中static和const有什么区别?

static 是静态的修饰符,const是定义常量的修饰符;const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式。对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话。此变量只在当前文件可见;对于static函数也是在当前模块内函数可见。static为静态修饰符,可以放在对象前面(函数也是一种对象)如:class Example{public static void show(){Console.WriteLine("这是一个静态方法");}}可直接Example.show();去调用这个方法而不用实例化当然也可以定义静态的属性:public static string str="hello";但如果这样Example.str="helloworld";就出现问题了也就是客户端可以在任何地方去改变str的值。这样的话极容易产生错误,因为str的值是依靠Example类的,随时可以改变。比如再声明一个类:Class Class1{Example.str="helloworld";public void show(){Console.WriteLine(Example.str);//此时Example.str会输出helloworld}}class Example{public static string str="hello";}}要防止str值发生改变,就需要用到const修饰符public const string str="hello";//str被称为常量这是如果再对Example.str赋值,则编译器将产生错误用常量来保存公共数据是最为合适的。

const与readonly的异同?

const 的概念就是一个包含不能修改的值的变量。
常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。
如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的。


readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值。
因为 readonly 是在计算时执行的,当然它可以用某些变量初始化。
readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活。


readonly 关键字与 const 关键字不同。

1. const 字段只能在该字段的声明中初始化。
readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null。
readonly可以是任何类型

* 需要注意的一个问题是:

对于一个 readonly 的 Reference 类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。

public static readonly Class1 my = new Class1();

my.SomeProperty = 10; //正常
my = new Class1(); //出错,该对象是只读的

但是,如果上例中的 Class1 不是一个 Class 而是一个 struct,那么后面的两个语句就都会出错。

static readonly:

Java 中 static 是当载入一个类时执行一次的。

C#中是怎么执行的,我没有查到。很奇怪几乎每本java的书都会说static的问题,C#的往往只说怎么用,但是应该是在main函数调用之前初始化,所以static readonly也是运行时的,可以用变量付值,如:

private static readonly string path = System.Windows.Forms.Application.StartupPath + “aaa”;


C#中const 和 static readonly 区别?最好举个例子

const
用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序
static readonly
用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化
示例:
测试类:
[运行代码] [复制到剪贴板] [ ± ]CODE:
using System;
using System.Collections.Generic;
using System.Text;
namespace Example02Lib
{
public class Class1
{
public const String strConst = "Const";
public static readonly String strStaticReadonly = "StaticReadonly";
//public const String strConst = "Const Changed";
//public static readonly String strStaticReadonly = "StaticReadonly Changed";
}
}
客户端代码:
[运行代码] [复制到剪贴板] [ ± ]CODE:
using System;
using System.Collections.Generic;
using System.Text;
using Example02Lib;
namespace Example02
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("strConst : {0}", Class1.strConst);
Console.WriteLine("strStaticReadonly : {0}", Class1.strStaticReadonly);
Console.ReadLine();
}
}
}
结果:
strConst : Const
strStaticReadonly : StaticReadonly
修改后的示例:
测试类:
[运行代码] [复制到剪贴板] [ ± ]CODE:
using System;
using System.Collections.Generic;
using System.Text;
namespace Example02Lib
{
public class Class1
{
public const String strConst = "Const Changed";
public static readonly String strStaticReadonly = "StaticReadonly Changed";
}
}
结果
strConst : Const
strStaticReadonly : StaticReadonly Changed


C#中,在声明一个变量时不赋值和声明一个变量时赋值,有什么区别?这个变更在下一行代码就用了的。

当然有区别,比如

赋值的话变量里面就会有值,而不赋值,只是开辟了这么一个空间,里面放的东西是什么就不知道了,会造成你程序出错。
比如
int a,b,c;
c=a+b;
这个时候你根本不知道a和b里面是什么值,直接用来使用,当然C 自然也会得到无用的结果。
变量一般都会要求先赋值后使用
int a=1,b=2,c;
c=a+b;
或者
int a,b,c;
a=1;
b=2;
c=a+b;
这样就可以了。
当然这个只是简单的情况,你可能会说自己会这么傻么,但是随着程序复杂程度的提高,加入循环,各类变量的增多,那么如果没有养成良好的习惯,就会导致你可能在最后把一些变量忘记赋值最后得到了错误的就结果


C#数据赋值问题

在C#中,对类中的成员变量赋初值只允许两种方法:1)定义变量时即赋初值,例如class Program{ // 定义成员变量并赋初值! int b = 22; }2)在构造函数中,或者其他方法中赋初值class Program{ // 定义成员变量 int b; pubic Program( ) { // 在构造函数中赋初值 b = 22; } }或者class Program{ // 定义成员变量 int b; pubic Program( ) { } public void SomeMethod( ) { // 方法中赋初值 b = 22; }}3)除此之外,都是错误的!

final,static,const在使用上有什么区别?

网上找到的,保留了JAVA中final、staticfinal:final修饰类:该类不可继承final修饰方法:该方法不能被子类覆盖(但它不能修饰构造函数)final修饰字段属性:属性值第一次初始化后不能被修改使用final可以提高程序执行的效率,将一个方法设成final后编译器就可以把对那个方法的所有调用都置入嵌入调用里。static:static修饰成员函数则该函数不能使用this对象static不能修饰构造函数、函数参数、局部成员变量static修饰成员字段则当类被虚拟机加载时按照声明先后顺序对static成员字段进行初始化。static修饰语句块:当类被虚拟机加载时按照声明先后顺序初始化static成员字段和static语句块static所修饰的方法和字段只属于类,所有对象共享,java不能直接定义全局变量,是通过static来实现的。java中没有const,不能直接定义常量,是通过static final组合来实现的。C#中readonly、constreadonly、const是c#中的两种常量readonly:为运行时常量,程序运行时进行赋值,赋值完成后便无法更改,也称为只读变量。const:为编译时常量,程序编译时将对常量值进行解析,并将所有常量引用替换为相应值。


static和const的用法有什么区别?

const 是常量修饰符
(1)在定义变量的时候是没有说明区别的;
例如:const int a; int const a;
但是定义此类变量时,一般放在前面!
(2)在定义改类型的指针时,就有三种定义方式,并且意义是不一样的;
a.指向const对象的指针;例如:const double pi = 3.14, ppi = 6.28, *ptr; ptr = π ptr = &ppi;这样是可以的,但是不能通过
ptr来改变所指对象的值,比如给 *ptr = 2.3;这样是不行的,
b.const指针;例如:int a; int const *ip = &a; ip不能在指向其他对象了;
c.指向const对象的const指针,这样定义出来的对象,一旦初始化,就不会在改变了;
static局部变量:static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;


C#中级面试题

答:网络七层由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 http协议 对应 应用层 tcp协议 对应 传输层 ip 协议 对应 网络层 TCP/IP 是传输层协议,主要解决数据如何在网络中传输,而http是应用层协议,主要解决如何包装数据 Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议 答:Socket是对TCP/IP协议的封装,要想明白Socket连接,先要明白TCP连接。 建立起一个TCP连接需要经过“三次握手”: 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连 接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手” 答:典型的 TCP 客户端要经过下面三步操作: 服务端的工作是建立一个通信终端,并被动地等待客户端的连接。典型的 TCP 服务端执行如下两步操作: 答:HTTP协议即超文本传送协议(HypertextTransfer Protocol ),是Web联网的基础,HTTP协议是建立在TCP协议之上的一种应用。 HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。 由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。 答:客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。 POST请求例子,使用Charles抓取的request: 答:一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。 HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。 答: 再简单点理解就是:

33条C#、.Net经典面试题目及答案

  本文集中了多条常见的C# Net经典面试题目例如 NET中类和结构的区别 ASP NET页面之间传递值的几种方式? 并简明扼要的给出了答案 希望能对学习C# Net的读者有所帮助    请你说说 NET中类和结构的区别?   答 结构和类具有大体的语法 但是结构受到的限制比类要多 结构不能申明有默认的构造函数 为结构的副本是又编译器创建和销毁的 所以不需要默认的构造函数和析构函数 结构是值类型 所以对结构变量所做的改变不会影响其的原值 而类是应用类型 改变其变量的值会改变其原值 申明结构用Struck关键字 申明类用class关键字 向方法传递结构是时是通过值传递的 而不是通过引用 与类不同 结构的实例化可以不使用New关键字 类可以实现接口    死锁的必要条件?怎么克服?   答 系统的资源不足 进程的推进的顺序不合适 资源分配不当 一个资源每次只能被一个进程使用 一个资源请求资源时 而此时这个资源已阻塞 对已获得资源不放 进程获得资源时 未使用完前 不能强行剥夺    接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?   答 接口是可以继承接口的 抽象类是可以实现接口的 抽象类可以继承实体类 但是有个条件 条件是 实体类必须要有明确的构造函数    构造器Constructor是否可以被继承?是否可以被Override?   答 Constructor不可以被继承 因此不能被重写(Overriding) 但可以被重载(Overloading)    当一个线程进入一个对象的方法后 其它线程是否可以进入该对象的方法?   答 不可以 一个对象的方法只能由一个线程访问    用最有效的方法算出等已 对于几?   答 <<    C#是否可以对内存直接进行操作?   答 这个问题比较难回答 也是个很大的问题 但是可以这样问答 C#是可以对内存进行直接操作的 虽然很少用到指针 但是C#是可以使用指针的 在用的时候需要在前边加unsafe 中使用了垃圾回收机制(GC)功能 它替代了程序员 不过在C#中不可以直接使用finalize方法 而是在析构函数中调用基类的finalize()方法    Error和Exception有是区别?   答 error表示恢复不是不可能 但是很困难 exception表示一种实际或实现问题 它表示程序运行正常不可以发生的    谈谈final finally finallize的区别?   答 final用于申明属性 方法和类 表示属性不可变 方法不可以被覆盖 类不可以被继承   Finally是异常处理语句结构中 表示总是执行的部分   Finallize表示是object类一个方法 在垃圾回收机制中执行的时候会被调用被回收对象的方法    HashMap和Hashtable区别?   答 HashMap是Hashtable的轻量级实现 非线程安全的实现他们都实现了map接口 主要区别是HashMap键值可以为空null 效率可以高于Hashtable    Collection和Collections的区别?   答 Collection是集合类的上级接口 Collections是针对集合类的一个帮助类 它提供一系列静态方法来实现对各种集合的搜索 排序 线程安全化操作    C#中委托是什么?事件是不是一种委托?   答 委托是一种安全的类似与函数指针 但是她比指针要安全的多 它可以把方法作为一个参数传递给另一个方法 可以理解为指向函数的引用 事件是一种消息机制 它是一种委托 委托不带方法体    Override Overload 的区别?   答 Override是重写的意思 它表示重写基类的方法 而且方法的名称 返回类型 参数类型 参数个数要与基类相同   Overload是重载是意思 它也表示重   写基类的方法 但是只要方法名相同 别的可以不同    在一个BS结构中需要传递变量值时 不能使用session coolke application 你有几中方法?   答 this server Transfer Querystring    C#种索引器实现过程 是否只能根据数字索引?   答 不是的 可以是任意类型    New有种用法?   答 有 种 第一种是 实例化如 New Class()   第二种是 public new 隐藏基类的方法   第三种是 在泛型类申明中的任何类型参数都必须有公共的无参构造函数    任何把一个Array复制到Arraylist中?   答 Foreach (object o in Array) ArrayList Add ( )   等有好多中种方法 自己想      概述反射和序列化?   答 反射 要给发射下一个定义还是比较难的 这里先说说我的理解 反射提供了封装程序集 模块和类型对象 可以用反射动态地创建类型的实例 将类型绑定到现有对象 或者从现有对象类型里获取类型 然后调用类型的方法或访问字段和属性   序列化 将对象转换为另一种媒介传输的格式过程 如 序列化一个对象 用Http通过internet在客户端和服务器之间传递该对象 在另一端用反序列化从该流中重新得到对象 Const和ReadOnly?   答 Const用来申明编程时申明常量 ReadOnly用来申明运行时常量    UDP和TCP连接有和异同?   答 TCP是传输控制协议 提供的是面向连接的 是可靠的 字节流服务 当用户和服务器彼此进行数据交互的时候 必须在他们数据交互前要进行TCP连接之后才能传输数据 TCP提供超时重拨 检验数据功能 UDP是用户数据报协议 是一个简单的面向数据报的传输协议 是不可靠的连接    进程和线程分别该怎么理解?   答 进程是比线程大的程序运行单元 都是由操作系统所体会的系统运行单元 一个程序中至少要有一个进程 有一个进程中 至少要有一个线程 线程的划分尺度要比进程要小 进程拥有独立的内存单元 线程是共享内存 从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行    ASP NET页面之间传递值的几种方式?   答 QueryString session cookies application server Transfer respose redictor    什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS CLS和CLR分别作何解释?   答 应用程序域 就是为安全性 可靠性 隔离性 和版本控制 及卸载程序提供的隔离边界 它通常由运行库宿主创建 应用程序域提供了一个更安全 用途更广的处理单元   托管代码 使用CLR编译语言编辑器开发编写的代码就叫托管代码   装箱和拆箱 是把值类型转换为引用类型的过程 是隐式的 相反的过程就是拆箱 是显式的   CTS是公共类型系统 CLS是公共语言规范 CLR公共语言运行库   强类型系统 每个变量和对象都必须具有申明类型    值类型和引用类型的区别?   答 值类型的值是存放在堆栈中的 改变其值 不改变变量原有的值 而引用类型的值是存放在栈中的 其引用的地址是存放在堆栈中的 改变其值也就改变了变量原有的值 值类型不允许包含null值 然而可空类型可以将null赋值给值类型l    的身份验证方式有哪些?   答 windows forms passport    解释一下UDDI WSDL的意义及其作用?   答 UDDI是统一描述集成协议 是一套基于Web的 分布式的 为WEB服务提供的信息注册的实现标准规范 同时为也是为企业本身提供的Web服务注册以让别的企业能够发现并访问的协议标准 提供了基于标准的规范 用于描述和发现服务 还提供了一组基于因特网的实现   WSDL这是一个基于XML的描述WEB服务的接口 什么是SOAP?   答 是简单访问协议 是在分布式环境中 交换信息并实现远程调用的协议 是一个基于XML的协议 使用SOAP 可以不考虑任何传输协议 但通常还是HTTP协议 可以允许任何类型的对象或代码 在任何平台上 以任一种语言相互通信 它是一种轻量级协议    如何部署一个页面?   答 vs vs 里边都有发表机制 vs 可以发布然后在复制部署   Vs 可以直接部署到对应的位置    如何理中的垃圾回收机制?   答 NET中的垃圾回收机制是引用程序对内存的回收和释放 当每次用new关键字创建一个对象时 运行库都要从托管堆中为其分配内存 因为空间是有限的 最终垃圾回收机制是要回收不用的内存的 已释放内存 重新使用    面向对象的三大基本原则?   答 封装 继承 多态    在 NET中所有类的基类是?   答 object    能用foreach遍历访问的对象需要实现?   答 需要实现IEnumerable接口和GetEnumerator ()方法    Heap与stack的差别?   答 Heap是堆 空间是由手动操作分配和释放的 它的存储区很大的自由存储区 lishixinzhi/Article/program/net/201311/12642


上一篇:bagpipes from baghdad

下一篇:theclassic