抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

js和C#相比。

最大不同,在于js是脚本语言,C#是编译性质的语言。

作用域方面

js的作用域只有全局作用域和方法作用域,但是可以通过let关键字将作用域限制在块中
C#是存在块作用域的,在块中定义的变量,出了这个块就不能使用。

关于拆装箱

  • 装箱:值类型数据转换为引用类型装箱时,生成的是全新的引用对象,这会有时间损耗,因此装箱操作效率不高。
  • 拆箱:引用类型数据转换为值类型数据。
  • 利用装箱拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来。
  • 值类型只会在中分配;
  • 引用类型分配内存与托管;
  • 使用泛型可以避免拆装箱操作。

代码演示:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
namespace AlgorithmTest07_拆装箱
{
class Program
{
static void Main(string[] args)
{
int n = 100000000;
Stopwatch t1 = new Stopwatch();//计时器
Stopwatch t2 = new Stopwatch();//计时器
Console.WriteLine("测试值类型对象int");
t1.Start();//开始计时
List<int> L = new List<int>();
for (int i = 0; i < n; i++)
{
L.Add(i);//不发生装箱
int x = L[i];//不发生拆箱
}
t1.Stop();//停止计时
Console.WriteLine(t1.ElapsedMilliseconds + "ms");
t2.Start();//开始计时
ArrayList aL = new ArrayList();
for (int i = 0; i < n; i++)
{
aL.Add(i);//发生装箱[值类型(int)转引用类型(object),ArrayList是object引用类型]
int x = (int)aL[i];//发生拆箱引用类型强转值类型
}
t2.Stop();
Console.WriteLine(t2.ElapsedMilliseconds + "ms");
Console.ReadKey();
}
}
}

C#中? 、?? 、?. 、??= 的用法和说明(转载)

一、可空类型修饰符< ? >

引用类型能用空引用来表示一个表示一个不存在的值,但是值类型不能。例如:

string str = null;
int i = null;//编译报错