搜索
有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 590|回复: 4
收起左侧

[普通教程] 【MSDNのC#系列教程】<语言规范>1.2.类型

[复制链接]

签到天数: 2 天

连续签到: 2 天

[LV.1]初来乍到

48

主题

24

好友

1万

积分

第一章

积分
11403
发表于 2012-7-20 19:35:55 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 羞怯的渣白君 于 2012-7-20 19:38 编辑

此为MSDN的资料源地址:http://msdn.microsoft.com/zh-cn/library/ms123401


C# 支持两种类型:“值类型”和“引用类型”。值类型包括简单类型(如 char、int 和 float)、枚举类型和结构类型。引用类型包括类 (Class) 类型、接口类型、委托类型和数组类型。
值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。对于引用类型,两个变量可能引用同一对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量。

示例

using System;
class Class1
{
   public int Value = 0;
}
class Test
{
   static void Main() {
      int val1 = 0;
      int val2 = val1;
      val2 = 123;
      Class1 ref1 = new Class1();
      Class1 ref2 = ref1;
      ref2.Value = 123;
      Console.WriteLine("Values: {0}, {1}", val1, val2);
      Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);
   }
}




显示了这种区别。运行该程序,可见下列输出:

Values: 0, 123
Refs: 123, 123





给局部变量 val1 赋值不会影响局部变量 val2,这是因为两个局部变量都是值类型(int 类型),每个局部变量都保存着各自的数据。相反,赋值 ref2.Value = 123; 则会影响到 ref2,因为 ref1 和 ref2 所引用的其实是同一个对象。

应对代码行

Console.WriteLine("Values: {0}, {1}", val1, val2);
Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);





做进一步解释,因为方法 Console.WriteLine 的某些字符串格式化行为较复杂,它所需的参数数目是可变的。第一个参数是字符串,它可能包含类似 {0} 和 {1} 这样编了号的占位符。每个占位符都引用一个尾随参数:{0} 引用第二个参数,{1} 引用第三个参数,依此类推。在将输出发送到控制台之前,每个占位符都会被替换成它所引用的参数的值,并按规定的格式显示。
开发人员可以通过枚举声明和结构声明定义新的值类型,并可通过类声明、接口声明和委托声明定义新的引用类型。

示例


using System;
public enum Color
{
   Red, Blue, Green
}
public struct Point
{
   public int x, y;
}
public interface IBase
{
   void F();
}
public interface IDerived: IBase
{
   void G();
}
public class A
{
   protected virtual void H() {
      Console.WriteLine("A.H");
   }
}
public class B: A, IDerived
{
   public void F() {
      Console.WriteLine("B.F, implementation of IDerived.F");
   }
   public void G() {
      Console.WriteLine("B.G, implementation of IDerived.G");
   }
   override protected void H() {
      Console.WriteLine("B.H, override of A.H");
   }
}
public delegate void EmptyDelegate();
願爾有生之日。   得見吾君臨天下
回复

使用道具 举报

该用户从未签到

2

主题

10

好友

826

积分

New Game

积分
826
发表于 2012-7-20 20:08:23 | 显示全部楼层
问下有python教学嘛,话说真心不怎么喜欢C/C++这种{}结构= =
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 2 天

连续签到: 2 天

[LV.1]初来乍到

48

主题

24

好友

1万

积分

第一章

积分
11403
 楼主| 发表于 2012-7-20 20:37:59 | 显示全部楼层

  渣白会去找资源搬运的!你先转转看有没有,如果没有的话渣白尽快去搬
願爾有生之日。   得見吾君臨天下
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

10

好友

826

积分

New Game

积分
826
发表于 2012-7-20 20:47:26 | 显示全部楼层
羞怯的渣白君 发表于 2012-7-20 20:37
渣白会去找资源搬运的!你先转转看有没有,如果没有的话渣白尽快去搬 ...

LoL  谢咯~  最好是GUI的~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 2 天

连续签到: 2 天

[LV.1]初来乍到

48

主题

24

好友

1万

积分

第一章

积分
11403
 楼主| 发表于 2012-7-20 20:50:39 | 显示全部楼层
506365608 发表于 2012-7-20 20:47
LoL  谢咯~  最好是GUI的~

好的我尽力!
願爾有生之日。   得見吾君臨天下
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(Z站|基宅) ( 粤ICP备18082987号-1 )

GMT+8, 2025-5-2 08:04 , Processed in 0.119936 second(s), 19 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表