C#编程(6_类)

  面向对象的程序设计(OOP,Object-Oriented Programming)是一种基于结构分析的、以数据为中心的程序设计方法。其主要思想是将数据及处理这些数据的操作都封装(Encapsulation)到一个成为类(Class)的数据结构中,使用这个类时,只需要定义一个类的变量即可。

  “类”是一种构造,这种构造将其他类型的变量、方法、事件组合在一起,从而创建自己的自定义类型。如果没有声明为静态类,客户端代码就可以创建赋给变量的“对象”或“实例”,从而使用该类。在对变量的所有引用都超出范围之前,该变量始终保持在内存中。所有引用都超出范围时,CLR将标记该变量以提供垃圾回收。如果类声明为静态类,则内存中只存在一个副本,且客户端代码只能通过该类自身而不是“实例变量”访问该类。与面向结构程序设计不同,类支持“继承”。

  声明类:

pubic class Customer
{
   //Fields ,properties, methods. events go here...
}

  类中包含类数据成员(常数、域、事件)、功能成员(方法、属性、索引、操作符、构造函数、析构函数)和嵌套类型。类类型支持继承,派生的类可以对基类进行扩展和特殊化。

  C#中提供了很多标准的类。在开发时,可以使用这些类,也可以自己定义类,类的定义方法为:

[类修饰符]class 类名[:父类名]
{
    [成员修饰符]类的成员变量或者成员函数;
};

  “父类名”表示从那个类继承。“父类名”可以省略,如果没有父类名,则默认从Object类继承而来。
  尽管有时类和对象可互换,但是它们是不同的概念。类定义对象的类型,但它不是对象本身;对象是基于类的具体实体,有时称为类的实例。通过new关键字(后跟对象将基于类的名称)可以创建对象,如:

Customer object1 = new Customer();

  创建类的实例后,将向程序员传递回对该对象的引用。在前面的实例中,object1是基于Customer的对象的引用,但不半酣对象本身。实际上,可以在根本不创建对象的情况下创建对象引用:

Customer object2;

  建议不要创建像这样的不引用对象的引用,因为在运行时通过这样的引用来访问对象的尝试将会失败。

Customer object3 = new Customer();
Customer object4 = object3;

  此代码创建了两个对象引用,它们引用同一个对象。因此,通过object3对对象所做的任何更改都将反映在随后使用的object4中,由于基于类的对象是按引用来引用的,因此类称为引用类型。
  类继承是通过“派生”来实现的,而派生意味着类是使用“基类”声明的,它的数据和行为从基类继承。通过在派生的类名后面追加冒汗和基类名称,可以指定基类,如下所示:

Public class Manger : Employee
{
    //Employee fields, properties, methods and events are inherited
    //New Manager fields, properties, methods and events go here...
}

  当类声明基类时,它继承基类除构造函数以外的所有成员。
  与C++不同,C#中的类只能直接从一个基类继承。但是,因为基类自身也可能继承自另一个类,所以可以间接的继承多个基类。而且,一个类可以直接实现一个以上的接口。

  类可以声明为抽象类。抽象类包含具有签名定义但没有实现的抽象方法。抽象类不能进行实例化。只能通过实现抽象方法的派生类使用抽象类。相比之下,密封类不允许其他类从其派生。

public class Person
{
    // Field
    public string name;

    // Constructor that takes no arguments.
    public Person()
    {
        name = "unknown";
    }

    // Constructor that takes one argument.
    public Person(string nm)
    {
        name = nm;
    }

    // Method
    public void SetName(string newName)
    {
        name = newName;
    }
}
class TestPerson
{
    static void Main()
    {
        // Call the constructor that has no parameters.
        Person person1 = new Person();
        Console.WriteLine(person1.name);

        person1.SetName("John Smith");
        Console.WriteLine(person1.name);

        // Call the constructor that has one parameter.
        Person person2 = new Person("Sarah Jones");
        Console.WriteLine(person2.name);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output:
// unknown
// John Smith
// Sarah Jones
时间: 2024-08-05 03:16:33

C#编程(6_类)的相关文章

Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

Objective-C语言介绍 . Objc与C语言 . 面向对象编程 . 类和对象 . 属性和方法 . 属性和实例变量 1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成开发工具Xcode编写OC的HelloWorld程序,在Xcode的控制台中, 1.2 方案 首先,启动集成开发工具Xcode. 然后,创建OC语言的工程. 最后,运行所创建的工

C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对象进行的调用的虚行为. 1.比較两个Sales_item对象 在编写函数计算销售总数之前,须要定义比較Sales_item对象的方法.要用Sales_item作为关联容器的keyword,必须能够比較它们.关联容器默认使用keyword类型的小于操作符,可是假设给Sales_item定义小于操作符,

obj-c编程04:类的继承

这第4篇内容比较少,主要说的是obj-c中的类的继承,需要说明的是我只是写了继承中最简单的形式,如果全部展开来说,那就多了去了!关键是现在肚子里还没装够墨水,没法展开啊! 下面的代码中,我们写了2个类:父类A和子类B,然后B中对A中的方法做了重写. #import <Foundation/Foundation.h> @interface A:NSObject{ int i; } @property int i; -(void)print; @end @implementation A @syn

Python源码 -- C语言实现面向对象编程(基类&amp;派生类&amp;多态)

由于公司的ERP系统数据量大,有40G+的数据,并发用户90+,连接数1000+,原来的IO性能跟不上用户的操作响应需求,报表查询慢,该做的索引都做过了,索引每周重建一次,还是解决不了问题,为此,公司新购了dell poweredge R720xd服务器,该套服务器支持2个阵列,24个硬盘,双CPU,64G内存,比较牛X的了,我们创建两个raid,两块SAS硬盘做Raid1,6块SSD硬盘做Raid10,系统装好了,高兴呀,但结过测试发现,总有一个raid速度相当慢,和台式机速度一样,我地妈呀,

C++ Primer 学习笔记_71_面向对象编程 --句柄类与继承

面向对象编程 --句柄类与继承 引言: C++中面向对象编程的一个颇具讽刺意味的地方是:不能使用对象支持面向对象编程,相反,必须使用指针或引用. void get_prices(Item_base object, Item_base *pointer, Item_base &reference){ //需要根据指针或引用实际所绑定的类型进行调用 cout<< pointer ->net_price(1)<< endl; cout<< reference.n

object-c编程tips-给类对象添加属性

此问题来源于网络封装的一个内容,由于保密的问题,我只叙述我业余的一些想法. 基本思想: 网络请求大家应该都会用一个基类的BaseNetWork, 然后由派生类继承于BaseNetWork,并实现一些特殊的方法. 一般标准的流程是传入block, 当网络请求完毕后,通过block回调回来.这里叙述的关键不是如何实现一个网络请求和回调block的相关内容,而是如何取消请求. 一般基类会实现一个cancelNetWork方法,它根据自己的url进行cancel操作. 举例: 我们使用 DerivedN

java面向对象编程(1)-类与对象

1.问题的提出      张老太养了两只猫猫:一只名字叫小白,今年3岁,白色.还有一只叫小花,今年100岁,花色.请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色.如果用户输入的小猫名错误,则显示张老太没有这只猫. //用前面学习过的知识写出代码如下: public class Demo107{ public static void main(String []args){ int a=49;//输入的名字49,50 int cat1age=3; //第一只猫 String

『电子书』分享一波码农必备编程开发类书籍[转]

layout: default title: 『电子书』分享一波码农必备编程开发类书籍[转] category: [技术, C/C++] comments: true --- 分享一些书籍 看到书籍很多,感觉很不错,就收藏下来了,是百度盘的连接,失效的可以评论一下以此更新一下连接. 书籍清单 Python编程快速上手 细说PHP(第2版) Python核心编程(第3版) Linux命令行与shell脚本编程大全(第3版) python高手之路 iOS编程(第4版) Python编程:从入门到实践

面向对象编程和类的概念

面向对象和面向过程比较 面向过程: 核心是过程,过程指的是解决问题的步骤,即先干什么再干什么然后干什么 基于该思想写程序好比在设计一条流水线,是一种机械式的思维方式. 优点:复杂的问题流程化,进而简单化 缺点:扩展性差 面向对象: 核心是对象:对象是特征与节能的结合体. 基于该思想编写程序就好比是在创造一个世界,你就是这个世界的上帝,是一种上帝式的思维方式.帝说:万物皆对象 优点:可扩展性强 缺点:编程的复杂程度要高于面向编程. 类 种类.分类.类别 对象是特征与技能的结合体,类是一系列 对象

面向对象编程,类和对象

面向对象编程,类和对象 一.面向对象 1.什么是面向对象 ? 面向对象是一种编程思想,是前辈们总结出的经验,指导程序员如何编写出更好的程序 , 核心是对象,程序就是一系列对象的集合, 程序员负责调度控制这些对象来交互着完成任务. 2.几个案例 案例1:把大象装进冰箱 ? ? 面向过程: ? 1.打开冰箱 ? 2.装入大象 ? 3.关闭冰箱 ? 面向对象: ? 找个具备装大象的技能的对象 总结:在面向对象中程序员的角度发生改变,从具体的操作者变成了指挥者 强调:对象不是凭空产生的,需要我们自己设计