引用类型
q 引用类型
- 表示指向数据的指针或引用
- 包含内存堆中对象的地址
- 为 null,则表示未引用任何对象
- 类、接口、数组、字符串、代理
Object
类型
一种根类型.面向对象的语言都提供一个根类型,其他对象都是从根类型派生而来.
String
类型
常用的一种引用类型.
在C#中连接字符串一般使用”+”运算符.string类型变量的值应用双引号括起来.
String类型变量的值保存在堆上,而不是堆栈上..
代理类型
代理类型就是定义一个变量,该变量指代一个函数或一个方法.使用delegate关键字定义.
接口类型
接口是一组包含函数方法的数据结构.通过接口类型变量可以实现调用对象组件的功能,接口类型变量可以包含属性.使用interface关键字可以定义接口类型变量.
示例名称:
使用接口类型
using
System;
class
class1
{
static void Main()
{
double a, b;
Console.WriteLine("
请输入第一个数字"
);
a = double.Parse(Console.ReadLine());
Console.WriteLine("
请输入第二个数字"
);
b = double.Parse(Console.ReadLine());
class2 class3 = new class2();
//
使用关键字as将class3定义为接口类型
c d = class3 as c;
d.add(a, b);
d.sub(a, b);
}
}
interface
c
{
void add(double a,double b);
void sub(double a,double b);
}
class
class2 : c
{
public void add(double a, double b)
{
double result;
result = a + b;
Console.WriteLine("{0}+{1}={2}",a,b,result);
}
public void sub(double a, double b)
{
double result;
result = a - b;
Console.WriteLine("{0}-{1}={2}", a, b, result);
}
}
数组
q 数组是同一数据类型的一组值
q 数组属于引用类型,因此存储在堆内存中
q 数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段中进行
语法: 数据类型[元素个数] 数组名称;
int[6] arrayHere;
示例名称:
使用数组类型
using
System;
class
arrTest
{
static void Main()
{
//
定义一个大小为的数组array,数组类型为int
int[] array = new int[5];
//
获取数组的长度,使用数组的属性Length
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine("
请输入array数组{0}个元素的值"
,i+1);
array[i] = int.Parse(Console.ReadLine());
}
float average = 0;
int sum = 0;
int min = 999999999;
for (int i = 0; i < array.Length; i++)
{
sum += array[i];
if(min>array[i]) min=array[i];
}
average = sum / array.Length;
Console.WriteLine("array
数组元素的平均值是{0},最小值是{1}"
,average,min);
}
}
由于值类型变量本身直接包含变量值
,而引用类型变量存储的是对变量值的引用.
使用引用类型变量时
,有可能存在两个变量引用相同的对象,当操作其中一个变量时,另一个变量的值也会受影响.
把一个值类型变量赋值给另一个变量
,这两个变量在内存堆栈中会创建同一个数据的两个相同的副本,彼此之间是独立公开的,不会相互影响.
示例名称:值类型
class
zhilei
{
static void Main(string[] args)
{
//
声明一个值类型的整型数据类型
int val = 100;
Console.WriteLine("
该变量的初始值为 {0}"
, val);
Test(val);
//
由于该数据类型属于值类型,所以将恢复其初始值
Console.WriteLine("
该变量的值此时为 {0}"
, val);
}
static void Test(int getVal)
{
int temp = 10;
getVal = temp * 20;
}
}
示例名称:引用类型
class
DataTypeTest
{
public int Val;
}
class
yinlei
{
static void Main(string[] args)
{
DataTypeTest objTest = new DataTypeTest();
objTest.Val = 100;
Console.WriteLine("
第一次变量的值为 {0}"
, objTest.Val);
//
传递属于引用类型的对象
Test(objTest);
//
由于该数据类型属于引用类型,所以会考虑新处理的值
Console.WriteLine("
变量的值为 {0}"
, objTest.Val);
}
static void Test(DataTypeTest dataTest)
{
int temp = 10;
dataTest.Val = temp * 20;
}
}
装箱是将值类型转换为引用类型
int val = 100;
//
值类型转换成引用类型
object obj = val;
Console.WriteLine (“对象的值 = {0}", obj);
拆箱是将引用类型转换为值类型
int val = 100;
//
值类型转换成引用类型
object obj = val;
//
引用类型转换成值类型,被装过箱的对象才能被拆箱
int num = (int) obj;
Console.WriteLine ("num: {0}", num);
利用装箱和拆箱功能,可通过允许值类型的任何值与 Object 类型的值相互转换,将值类型与引用类型链接起来
变量
用于存储特定数据类型的值
语法:
访问修饰符
数据类型
变量名
变量中存储的值取决于该变量的类型
常量
用于在整个程序中将数据保持同一个值
const 关键字用于声明常量
语法:const 数据类型 常量名 = 常量值;
例如:
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
const1
{
class const1
{
static void Main()
{
// PI
常量PI
const float _pi = 3.14F;
//
由地球引力引起的加速度常量,单位为cm/s*s
const float _gravity = 980;
//
钟摆的长度
int length = 40;
//
钟摆的周期
double period = 0;
//
钟摆周期的计算公式
period = 2 * _pi * Math.Sqrt(length / _gravity);
Console.WriteLine("
钟摆的周期为{0} 秒"
, period);
}
}
}
常用命名空间
命名空间
|
说明
|
System.Drawing
|
处理图形和绘图,包括打印
|
System.Data
|
处理数据存取和管理,在定义 ADO.NET 技术中扮演重要角色
|
System.IO
|
管理对文件和流的同步和异步访问
|
System.Windows
|
处理基于窗体的窗口的创建
|
System.Reflection
|
包含从程序集读取元数据的类
|
System.Threading
|
包含用于多线程编程的类
|
System.Collections
|
包含定义各种对象集的接口和类
|