C#入门分享(五)——对象与类

到目前为止,我们介绍了组成C#语言的主要模块,包括变量、数据类型和程序流语句 ,并简要介绍了一个只包含Main()方法的完整小例子。但还没有介绍如何把这些内容组合在一起,构成一个完整的程序,其关键就在于对类的处理。

(一) 类与结构

类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。类定义了类的每个对象(称为实例)可以包含什么数据和功能。例如,如果一个类表示一个顾客,就可以定义字段CustomerID、 FirstName、LastName和Address, 以包含该顾客的信息。还可以定义处理在这些字段中存储的数据的功能。接着,就可以实例化表示某个顾客的类的对象,为这个实例设置相关字段的值,并使用其功能。

结构与类的区别是它们在内存中的存储方式、访问方式(类是存储在堆(heap)上的引用类型,而结构是存储在栈(stack)上的值类型)和它们的一些特征(如:结构不支持继承)。较小的数据类型使用结构可提高性能。在语法上,结构与类非常相似,主要的区别是使用关键字struct代替class来声明。

对于类和结构,都使用关键字new来声明实例,这个关键字创建对象并对其进行初始化:

在大多数情况下,类要比结构常用得多。因此,我们主要讨论类。

(二)类的数据成员与函数成员

数据成员是包含类的数据——字段、常量和事件的成员。数据成员可以是静态数据。类成员总是实例成员,除非用static进行显式的声明。字段是与类相关的变量。 一旦实例化对象,就可以使用语法Object.FieldName来访问这些字段,例如:


     函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和终结器(finalizer)、运算符以及索引器。

(1)方法

方法是与某个类相关的函数,与数据成员一样,函数成员默认为实例成员,使用static修饰符可以把方法定义为静态方法。声明方法代码如下:


     (2)属性

属性(property)的概念是: 它是一个方法或一对方法,在客户端代码看来,它(们)是一个字段。

在 C# 中定义属性,可以使用下面的语法:

    
     例如:

在属性定义中省略set访问器,就可以创建只读属性。同理,省略get访问器可创建只写属性。

(3)构造函数

声明基本构造函数的语法就是声明一个与包含的类同名的方法 ,但该方法没有返回类型:

一般情况下,如果没有提供任何构造函数,编译器会在后台创建一个默认的构造函数。这是一个非常基本的构造函数,它只能把所有的成员字段初始化为标准的默认值,这通常就足够了,否则就需要编写自己的构造函数。

但注意 ,如 果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数。


      一般使用this关键字区分成员字段和同名的参数。

注意,可以把构造函数定义为private 或 protected,这样不相关的类也不能访问它们。

而编写静态构造函数的一个原因是,类有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性。

(4)匿名类型

前面讨论了var关键字,它用于表示隐式类型化的变量。var与new关键字一起使用时,可以创建匿名类型。匿名类型只是一个继承自Object且没有名称的类。该类的定义从初始化器中推断,类似于隐式类型化的变量。例如:

好,关于C#的类和对象就先介绍,相关内容还有很多,就当是抛砖引玉了,只有在实际的运用中才能够学到更多。下一篇博客将重点介绍面向对象的编程方法,即C#中的封装,继承与多态。

时间: 2024-10-19 08:34:54

C#入门分享(五)——对象与类的相关文章

Swift中文教程(五)--对象和类

原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文里面,否则,方法和函数的写法也是这样: 1 class Shape { 2 var numberOfSides = 0 3 func simpleDescription() -> String { 4 return "A shape with \(numberOfSides) sides.&q

C++程序设计入门(上) 之对象和类

面向对象编程: 如何定义对象?  同类型对象用一 个通用的类来定义 class C { int p; int f(); }; C ca, cb; 一个类用变量来定义数据域,用函数定义行为. class Cirle { public: double r; Cirle() { r = 1; } Cirle(double newr){ r = newr; } double get() { return r * r *3.14; } }; 构造函数: 类中有 一种特殊的“构造函数”,在创建对象时被自动调

c++第五章-(类与对象、构造器和析构器)

1.构造器与结构体的区别:构造器多支持方法.其作用有申请内存,初始化变量. 在c++中构造器没有返回值:语法Class Name(); 2.析构器的作用:释放内存. 在c++中析构器没有返回值:语法~ClassName(); class Animal { public: std::string mouth; std::string name; void eat(); void sleep(); void drool(); Animal(std::string theName); }; class

PHP入门学习笔记之—— PHP 类与对象 (下)

N.魔术方法 :__construct, __destruct (参看 构造方法和析构方法), __call, __callStatic, __get, __set, __isset, __unset (参看 重载), __sleep, __wakeup, __toString, __set_state 和 __clone 等方法在PHP中被称为"魔术方法"(Magic methods). 在命名自己的类方法时不能使用这些方法名. Caution PHP把所有以__(两个下划线)开头的

Swift入门(五)——数组(Array)

集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,分别是数组(Array)和字典(Dictionary).他们的主要区别在于数组中的元素由下标确定,而字典中的数据的值由数据的键(Key)决定.以下我们认为集合就是数组或字典. 集合的可变性 我们可以定义一个集合常量或者集合变量.一旦定义为常量,就意味着集合的长度.内容和顺序都不能再修改了.比如,定义为常量的数组,不能再向其中添加新的元素. 数组的创建 由于swift中变量的创建遵循" var 变量名:变量类型 "的语法

PHP基础入门(五)---PHP面向对象

前言: 今天来和大家介绍一下PHP的面向对象.说到面向对象,我不得不提一下面向过程,因为本人在初学时,常常分不清楚. 那么面向对象和面向过程有什么区别呢?下面给大家简单介绍一下: 面向对象专注于由哪个对象来处理一个问题. 其最大特点是由一个一个具有属性和功能的类,从类中拿到对象,进而处理问题. 面向过程专注于解决一个问题的过程.其最大特点是由一个一个的函数去解决处理这个问题的一系列过程. 了解了面向对象和面向过程的差别之后,我们来学习一下有关PHP的面向对象的基础知识. ***本章关键词:面向对

Objective C 快速入门学习五

<一>继承和多态 @class Complex 声明类(同C++) 子类函数成员 super 访问父类 同C++类似 1.通过继承 在子类中添加新方法 2.通过继承 在子类中添加新成员 3.通过继承 实现多态(实现比较简单,通过Id通用类型作为父类) 4.重载 5.抽象类abstract作用:创建子类更容易:提供了处理所有派生子类的公共接口:抽象方法制定了标准协议,规范子类必须实现. 6.通用类型id,编译时不会做类型检查,在运行时才会动态绑定具体类型,指出错误. 静态类型在编译阶段就会指出错

C#4.0语法糖之第五篇: 匿名类 &amp; 匿名方法

今天时间有点早,所以上来在写一篇文章吧,继续上一篇的文章,在我们平时编程过程中有没有遇到过这样的一个情景,你定义的类只是用来封装一些相关的数据,但并不需要相关联的方法.事件和其他自定义的功能.同时,这个类仅仅在当前的应用程序中使用,而不需要在项目间重用.你所需要的只是一个“临时的”类型,现在我们来看看这个传统类的定义: 1 internal class oneClass 2  3 { 4  5      //定义若干私有数据成员 6  7      //通过属性来封装每个数据成员 8  9   

MyBatis基础入门《五》核心配置文件

MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-config.xml 文件. 资料参考:http://www.mybatis.org/mybatis-3/ 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUB

第十五章 文件属性类的实现

                  第十五章    文件属性类的实现        根用户的权限也不能是无限大.必须考虑到保护用户的隐私!用户的文件内容.程序代码可设置为根用户也不能观看,只能是文件拥有者可以查看.修改.但根用户可以删除一切非根用户的文件.也可以查看用户的目录.所以,i_mode字符更改如下:      BU16 i_mode; // 描述文件的访问权限:文件的读.写.执行权限  // i_mode.15-13  ftype; 文件类型: 0-符号软连接文件, // 1-硬连接文