`
macrabbit
  • 浏览: 231895 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

第一章 FRAMEWORK 基本原理 第一课:使用值类型

 
阅读更多

第一章

Framework 基本原理

.NET Framework 是一个不可或缺的Microsoft Windows 组建,它被设计去支持下一代应用和服务。对于在其它面向对象环境下工作的开发者来说,许多.NET的原理都应该很熟悉;但是,.NET Framework 也包含许多特性,甚至对于最有经验的开发者来说都是最新的。这一章提供对.NET Framework 程序的概述。

 

使用.NET Framework去管理.NET Framework 应用中的数据

2.0 中的系统类型(参考System命名空间)

 Value types

 Reference types

 Attributes

 Generic types

 Exception classes

 Boxing and UnBoxing

 TypeForwardedToAttribute Class

■ .NET Interface,使别的组建去遵守其规则。

标准接口. (参考System 命名空间)

 IComparable interface

 IDisposable interface

 IConvertible interface

 ICloneable interface

 IEquatable interface

 IFormattable interface

使用eventsdelegates去控制.NET 应用组建的互操作。

 Delegate class

 EventArgs class

 EventHandler delegates

 

 

 

第一课:使用值类型

.NET Framework 中最简单的类型是值类型,主要是数值类型和布尔类型。值类型是直接包含它们的数据,而不是包含存在内存其它地方的数据的引用。值类型的实例存在被称为堆的内存区域中,运行时能创建,读,更新,然后使用最小的开支去删除它们。

 

 

有三种值类型:

 内建类型

 用户自定义类型

 枚举类型

每种类型都继承System.Value 基本类型下列部分显示如何使用这些不同的类型。

 

内建值类型:

内建值类型是.NET Framework提供的基本类型,其它类型能够用它去构建。所有的内建数字类型都是值类型。你可以基于你操作的值得大小去选择一个数字类型及你所要求的精确度

1列出了从最大到最小的最常用的数字类型。前六个用于所有数字类型后三个用于增加精确度。

Table 1-1 Built-in Value Types

Type(C# alias)     Bytes Range                         Use for

System.SByte (sbyte)   1     –128 to 127                            Signed byte values

System.Byte (byte)      1        0 to 255                               Unsigned bytes

System.Int16 (short)     2                        –32768 to 32767                     Interoperation and other specialized uses

System.Int32 (int)        4      –2147483648 to 2147483647              Whole numbers and counters

System.UInt32 (uint)    4      0 to 4294967295                         Positive whole numbers and counters

System.Int64 (long)      8  –9223372036854775808 to9223372036854775807        Large whole numbers

System.Single (float)     4  –3.402823E+38 to 3.402823E+38                       Floating point numbers

System.Double (double) 8  –1.79769313486232E+308 to 1.79769313486232E+308 Precise or large floating point numbers

System.Decimal (decimal)16  –79228162514264337593543950335 to 79228162514264337593543950335     Financial and

scientific calculations

requiring

great precision

Note:

Optimizing performance with built-in types

运行时优化了32位整形(Int32 and UInt32),所以使用这些类型去计算和其它需频繁访问的整形变量.对于浮点型的操作, Double是最有效的类型因为这些操作被硬件优化了.

这些数字类型应用的很频繁,以至于C#语法中为它们定义了别名.使用别名等效于使用类型全名所以大部分程序员使用更短的别名.除了数字类型非数字类型列在表1-2同时它们也使值类型.

Table 1-2 Other Value Types

Type (C# alias)        Bytes      Range                    Use for

System.Char(char)            2             N/A                               Single Unicode characters

System.Boolean(bool)         4             N/A                               True/False values

System.IntPtr (none)   Platformdependent     N/A                               Pointer to a memory address

System.DateTime(date)       8    1/1/000112:00:00 AM to12/31/999911:59:59 PM Moments in time

Framework中有几乎300多的值类型,但显示在这的能满足大部分的需要.当你在值类型变量之间赋值时数据被从一个变量拷贝到其它变量并且在这个过程中数据被存在不同的位置.在这一点引用类型是不同的将在第二课讨论.

即使值类型总是代表着简单的值,它们是作为对象在运行.换句话说你能在它们上面调用方法.事实上,当值要以文本形式被显示出来时, ToString是一个被普遍使用的方法.

ToString重载了System.Object 类型的同名方法.

NOTE  Object 基础类

.NET Framework,所有的类型都继承System.Object.这样的关系有利于通过Framework建立公共类型系统.

 

如何声明值类型:

为了使用一个类型,你必须首先声明一个符合作为这个类型的实例.值类型有一个隐性的构造器所以声明它们的同时就自动地实例化了这个类型;当你使用类时,不必为其赋值 .构造器会为这个新的实例赋上 一个默认值(通常是null0)给新的实例,但你要在声明中显示地初始化这个变量,如下下程序显示的:

bool b = false;

 

如果你想要去确定一个值已经赋值了,声明一个变量为nullable.比如说,如果你在从一个表单上的yes/no的问题存储数据并且用户并没有回答问题,你应当存储一个null.以下的代码可让一个Boolean变量是true,false,或其它的.

// C#

Nullable<bool> b = null;

// Shorthand notation, only for C#

bool? b = null;

NOTE .NET 2.0

The Nullable .NET2.0的一个新类型

声明一个nullable的变量,HasValueValue成员.使用HasValue去探测一个值是否被赋上:

// C#

if (b.HasValue)Console.WriteLine("b is {0}.", b.Value);

else Console.WriteLine("b is not set.");

 

 

如何创建用户定义类型:

 

用户自定义类型也被称struct,在这个关键字后去创建它们.用户自定义类型被存储在栈中并且直接包含变量的数据.在其它方面结构的特征几乎与类是一致的.结构是一个其它类型的组合使它能够更简单的与相关数据工作.结构最简单的例子是System.Drawing.Point, 它包括XY整数属性这量个属性定义了点的水平坐标和垂直坐标.Point结构通过提供构造器和成员简化了设置坐标的工作.显示如下:

 

// C# - Requires reference to System.Drawing

// Create point

System.Drawing.Point p = new System.Drawing.Point(20, 30);

// Move point diagonally

p.Offset(-1, -1);

Console.WriteLine("Point X {0}, Y {1}", p.X, p.Y);

你可以使用C#中的关键字struct去定义你自己的结构.比如: 以下的代码创建了一个类型,它通过结构的构造器去设定最大值和最小值,然后由最大值和最小值之间的整数去画圆.  

// C#

struct Cycle

{

// Private fields

int _val, _min, _max;

// Constructor

public Cycle(int min, int max)

{

_val = min;

_min = min;

_max = max;

}

public int Value

{

get { return _val; }

set

{

if (value > _max)

_val = _min;

else

{

if (value < _min)

_val = _max;

else

_val = value;

}

}

}

public override string ToString()

{

return Value.ToString();

}

public int ToInteger()

{

return Value;

}

// Operators (new in .NET 2.0)

public static Cycle operator +(Cycle arg1, int arg2)

{

arg1.Value += arg2;

return arg1;

}

public static Cycle operator -(Cycle arg1, int arg2)

{

arg1.Value -= arg2;

return arg1;

}

}

NOTE .NET 2.0

Operator.NET2.0中新的关键字。

使用operator关键字去重载一个内建的操作符或提供一个在类或结构的声明中的用户定义的类型转换。对于类型转换分为隐式和 显式转换 

    class Program

    {

        int aa, bb;

 

        public Program(int a, int b)

        {

            this.aa = a;

            this.bb = b;

        }

 

        public static Program operator +(Program a, Program b)

        {

            return new Program(a.aa + b.aa ,a.bb +b.bb );

        }

 

 

        public static Program operator -(Program a, Program b)

        {

            return new Program(a.aa - b.aa, a.bb - b.bb);

        }

 

        public static explicit operator int(Program a)

        {

            return a.aa + a.bb;

        }

 

        static void Main(string[] args)

        {

            Program p1 = new Program(1,1);

            Program p2 = new Program(2,2);

            int v= (int)(p1 +p2 -p2 );

 

            Console .WriteLine ("{0}",v);

            Console .ReadLine ();

        }

    }

 

返回值为2.

你能够使用这个结构去表现一些在一个范围内重复出现的项,比如说旋转度或足球游戏的四等分,如下所示:

 

// C#

Cycle degrees = new Cycle(0, 359);

Cycle quarters = new Cycle(1, 4);

for (int i = 0; i <= 8; i++)

{

degrees += 90; quarters += 1;

Console.WriteLine("degrees = {0}, quarters = {1}", degrees, quarters);

}

 

这个循环的例子能被简单的由一个值类型转换为一个引用类型,只需把struct关键字变为class关键字。如果你做了那个改变,Cycle类的实例将被分配在托管堆中,而不是占用12 bytes(每个私有整形占用4bytes)的栈中, and assignment between two variables

results in both variables pointing to the same instance.

 

当功能比较简单时,结构比类更加有效。如果这个类型作为一个值类型比引用类型性能方面更好,你应该把它定义为一个结构。特别说明的是,要定义结构类型应当满足一下的表准:

 

 逻辑上,它代表一个单独的值。

 有一个小于16bytes的实例。

■创建之后不会改变

 不会被映射到一个引用类型。

 

分享到:
评论

相关推荐

    android-framework-Android系统原理与开发

    根据给定的信息,我们可以深入探讨Android系统的原理与开发,特别是关于Android Service的理论与实践。 ### Android Framework概览 在Android系统中,Android Framework层扮演着核心的角色,它位于Linux内核之上,...

    深入.NET平台和C#编程(.NETOOP)第一章

    第一章通常会介绍C#的基本语法,如变量、数据类型、运算符、控制流语句以及方法等。 4. **对象和类**: 面向对象编程(OOP)是C#的核心特性,第一章会详细解释类的概念,包括类的定义、属性、方法、构造函数和析构...

    Robot Framework 教程 - 使用For循环

    Robot Framework 教程 - 使用For循环 在自动化测试过程中,使用For循环来对某个动作进行重复操作是很普遍的行为。在Robot Framework 中,各种测试库中均提供了多种方式的For循环结构,在其中覆盖了大部分类型的循环...

    Entity Framework 6 Recipes, 2nd Edition.pdf

    **第1章:开始使用Entity Framework** - **安装与配置**:介绍如何安装Entity Framework 6,并设置开发环境。 - **基本概念**:解释Entity Framework的基本工作原理,包括ORM的概念、数据库上下文(DbContext)、...

    第11章 .NET Framework 2.0简介

    第 3 章:变量、数据类型和表达式 第 4 章:分支和循环 第 5 章:面向对象 第 6 章:面向对象的高级应用 第 7 章:程序的生成、调试和异常处理 第 8 章:数组与字符串 第 9 章:基于 Windows 的应用程序 第 10 章:...

    某211大学 .net 教学课件PPT 第一章 NET Framework介绍

    某211大学 .net 教学课件PPT 第一章 NET Framework介绍 带课后作业安排

    framework rapid

    "framework rapid"是一种快速开发框架,它旨在提高软件开发的效率和质量,让开发者能够更快地构建应用程序。这个框架的核心理念是通过提供一系列预先设计的组件、模板和工具,简化开发流程,降低项目的复杂性。 在...

    Entity Framework 使用详解doc

    在 Entity Framework 中,Computed Properties 是一种特殊类型的属性,用于计算数据模型中的某些值。这种属性可以根据其他属性的值进行计算,从而提供更多的数据模型信息。 Entity Framework 还提供了 Transparent ...

    Entity Framework 教程

    在了解了Entity Framework的基本原理后,教程讲解了使用技巧、注意事项以及性能分析。例如,何时选择不同的查询方法,以及如何优化查询性能。同时,提到了Entity Framework的限制和当前版本存在的问题,如性能问题和...

    使用python+robot framework识别图片验证码

    本篇将详细讲解如何使用Python和Robot Framework相结合来识别图片验证码,以及如何利用PIL库进行图像处理,以及提到了一个用于识别验证码的第三方库——pytesser。 首先,让我们了解Python和Robot Framework的基本...

    Pro Entity Framework 4.0

    #### 第一章:介绍ADO.NET 4.0实体框架 **知识点概述:** 本章节主要介绍了ADO.NET 4.0实体框架的基本概念及其在.NET编程中的重要性。ADO.NET 4.0实体框架是一种用于与数据库进行交互的对象模型和工具集,它提供了...

    Entity Framework 4 In Action

    - **第2章:开始使用Entity Framework 3** - 指导读者如何设置开发环境,并通过简单的示例演示如何快速上手EF3。 - 探讨了如何设计实体模型、创建数据库上下文以及执行基本的数据操作。 ##### 第二部分:开始使用...

    .NET Framework 试题及其答案(9)

    - 类型系统:C#是强类型语言,支持值类型(如int、bool)和引用类型(如类、接口)。 - 命名空间:组织代码的结构,如System、System.IO等。 - 对象和类:C#基于面向对象编程,支持类、对象、继承、多态、封装等...

    .NET_Framework基础

    本章重点介绍了如何使用 .NET Framework 2.0 中的系统类型来管理应用中的数据。这些系统类型主要分为两大类:实值类型与引用类型,并且涵盖了属性、泛型类型、异常处理等内容。 ##### 实值类型 实值类型是最简单的...

    .net framework 2.0程序设计答案

    .NET Framework 2.0 是微软开发的一个重要框架,它为开发者提供了一个托管的代码执行环境,使得编写和运行跨平台的应用程序变得更加简单。这个框架包含了众多的组件和服务,旨在提高开发效率、安全性以及应用程序的...

    RobotFramework用法总结.pdf

    Robot Framework是一种开源自动化测试框架,它使用自然语言般的语法,使得测试用例的编写简洁易懂。本篇文章将深入探讨Robot Framework的基本用法,旨在帮助初学者快速掌握其核心概念和操作。 一、环境搭建 Robot ...

    (64位操作系统Framework4.7.2)C:\Windows\Microsoft.NET下的Framework

    1. **mscorlib.dll**:这是.NET Framework的核心库,包含基本类型和系统对象。 2. **System.*.dll**:一系列的系统类库,如System.IO、System.Threading等,提供了各种操作系统的功能接口。 3. **mscorjit.dll**:...

    C#课件Net FrameWork简介

    在本门课程的第一章中,重点是了解如何使用 C# 编写命令行和窗口程序,以及如何通过 ADO.NET 进行数据库交互。以下是一些关键知识点: 1. **C# 程序开发步骤**:学习如何创建、编译和运行 C# 程序。这包括使用 ...

    .NET Micro Framework开发板原理图(红牛开发板)

    .NET Micro Framework(简称.NET MF)是一种轻量级的.NET运行时环境,主要设计用于资源受限的设备,如嵌入式系统、物联网(IoT)设备等。它允许开发者使用C#、VB.NET或C++等高级语言进行编程,提供了一套完整的类库,...

Global site tag (gtag.js) - Google Analytics