前面说了C#中的结构,那说类的时候,先说说类与结构的相同点吧

  类是一种构造,通过这样的构造将其它类型的变量,方法,事件组合在一起构成自己的自定义类型(包含数据和行为),类只能实现单继承,但是可以实现多借口继承。实例1:

  

View Code

/* * ${res:XML.StandardHeader.CreatedByYangbo} * 用户: ${YangBo} * 日期: 10/13/2011 * 时间: 9:05 * */

using System;namespace ClassTestDemo{public class MyGril:People,IWalk,IEat    {private String name;public string name{get;set;}

private Int32 age;public Int32 Age        {get            {return Age;            }set            {if (age>0&&age<200) {                    Age=value;}            }

        }public MyGril(string name,Int32 age)        {this.age=age;this.name=name;        }

public void GetInfo(string name,Int32 age)        {            Console.WriteLine("I'm {0},and {1} years old",name,age);        }

public void Walk()        {            Console.WriteLine("MyGril can walk of frist in her life");        }public void Eat()        {            Console.WriteLine("MyGril is crying so huury,Mabey Her wang to eat some");        }

    }

public class People    {public interface IWalk        {void Walk();        }

public interface IEat        {void Eat();        }    }

}

  如果有Static关键字,表明这个类是静态类,它们在使用时,在内存中保存一个副本,并且在访问该类的时候只能通过自身访问。 

  使用静态类的优点:

    编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实例。

    静态类可以使你的实现更简单,迅速,因为不必创建实例就可以调用该类中的静态方法,字段,属性,事件

    静态成员常用于不会随着对象状态的变化而变化的数据或计算,请参见 实例2 

  静态类有以下特点:

  • 它们仅包含静态成员。(可以声明静态构造函数以分配初始值或某个状态)

  • 它们不能被实例化。(私有构造函数阻止静态类被实例化)

  • 它们是密封的。(不能被继承)

  • 它们不能包含实例构造函数  实例2:

    View Code

     1 /* 2  * ${res:XML.StandardHeader.CreatedByYangbo} 3  * 用户: ${YangBo} 4  * 日期: 10/13/2011 5  * 时间: 11:03 6  *  7  */ 8 using System; 9 namespace ClassTestDemo.StaticClass10 {11     public static class TemperatureConverte12     {13         /// <summary>14         /// 摄氏度转华氏度15         /// </summary>16         /// <param name="centigrade">摄氏温度</param>17         /// <returns>返回华氏温度</returns>18         public static Double CentigradeToFahrenheit(string centigrade )19         {20             Double Celsious=Convert.ToDouble(centigrade);21             Double Fahren=(Celsious* 9 / 5)+ 32;22             return Fahren;23         }24         25         public static Double FahrenheitToCentigrade(string fahrenheit)26         {27             Double Fahren=Convert.ToDouble(fahrenheit);28             Double Celsious= (Fahren-32)* 5 / 9;29             return Celsious;30         }    31     }32     33     public  class TempertureChange34     {35         public  Double CentigradeToFahrenheit(string centigrade )36         {37             Double Celsious=Convert.ToDouble(centigrade);38             Double Fahren=(Celsious* 9 / 5)+ 32;39             return Fahren;40         }41         42         public  Double FahrenheitToCentigrade(string fahrenheit)43         {44             Double Fahren=Convert.ToDouble(fahrenheit);45             Double Celsious= (Fahren-32)* 5 / 9;46             return Celsious;47         }48     }49     50     public class MainClss51     {52         public static void Main()53         {54             // Error code,不能创建类的实例55             TemperatureConverte tc=new ClassTestDemo.StaticClass.TempertureChange;56             57             //通过静态类来实现(此处为示例代码,不完整)58             Console.WriteLine("请输入摄氏温度!")59             string cel=System.Console.ReadLine();60             Double Fc=TemperatureConverte.CentigradeToFahrenheit(cel):61             Console.WriteLine("请输入华氏温度!")62             string Fat=System.Console.ReadLine();63             Double Ff=TemperatureConverte.FahrenheitToCentigrade(fat);64             65             //通过类TempertureChange来实现转换66             TempertureChange TC=new TempertureChange();67             TC.CentigradeToFahrenheit(23);68             TC.FahrenheitToCentigrade(32);69             70         }71     }72 }

    如果类的声明中有Abstract,表明该类为抽象类

  • 抽象类与普通类

  •   抽象类不能被实例化,其它的与普通类相似,与普通类相比,抽象类有抽象方法,并且抽象方法只能声明在抽象类中,抽象方法不能有具体实现,必须在它的的派生类中实现,这一点又和接口(Interface)相同。需要注意的是,当抽象类作为基类时,其派生类必须实现抽象类的所有抽象方法。抽象类从基类继承虚方法时,可以用抽象方法重写虚方法。

  • 此时的抽象类应用场景:

  •  提供多个派生类可共享的基类公共定义,例如,类库可以定义一个作为其多个函数的参数的抽象类 ,实例3:

  • View Code

     1 /* 2  * ${res:XML.StandardHeader.CreatedByYangbo} 3  * 用户: ${YangBo} 4  * 日期: 10/13/2011 5  * 时间: 14:31 6  *  7  */ 8 using System; 9 namespace MyAbstratClass10 {11     public class AbstractClss 12     {13         public abstract class AbClass:VirtualClass14         {15             //抽象方法没有实现,所以方法后面是”分号“16             public abstract void DoSomeThing(string dosome);17             18             //利用抽象方法重写虚方法19             public abstract override int NumAdd(int num1, int num2)20             {21                 return base.NumAdd(num1, num2);22             }23         }24         25         public class Home:AbClass26         {27             public override void DoSomeThing(string dosome)28             {29                 Console.WriteLine("派生类实现了抽象基类的抽象方法");30             }31         32         }33         34         public class VirtualClass35         {36             public virtual Int32 NumAdd(Int32 num1,Int32 num2)37             {38                 return num1+num2;39             }40         }

    密封类(sealed class)和分部类(partial class)

  • 前面我们说过,静态类是密封的,那它就有密封类的特点不能继承。也就是不能作为基类,如果想取消基类的虚效果,可以这样写:实例4:

    View Code

    1             public sealed override int NumAdd(int num1, int num2)2             {3                 return base.NumAdd(num1, num2);4             }

    分布类(partial class)

  • 关键字partial 可以将结构,类,接口,方法的定义拆分到多个.cs源文件。遵守的原则是:

    partial 关键字指示可在命名空间中定义该类、结构或接口的其他部分。 所有部分都必须使用 partial 关键字。 在编译时,各个部分都必须可用来形成最终的类型。 各个部分必须具有相同的可访问性,如 publicprivate 等。

    如果将任意部分声明为抽象的,则整个类型都被视为抽象的。 如果将任意部分声明为密封的,则整个类型都被视为密封的。 如果任意部分声明基类型,则整个类型都将继承该类。

    指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。 各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。 在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。 最终类型是所有部分在编译时的组合。

  • 下面的part1和part2代码的作用是一样的。实例5:

  • code part1:

  • View Code

    1 public partial class MyClass: ICloneable,IComparable2         {3             //ICloneable,IComparable是接口4         }5         public partial class MyClass: Home6         {7             //Home 是一个示例类8         }

    code part2:

    View Code

    1 public partial class MyClass: ICloneable,IComparable,Home2         {3             //ICloneable,IComparable是接口,Home 是一个示例类4         }

    关于类先写这么多,希望大家拍砖!

转载于:https://www.cnblogs.com/tymonyang/archive/2011/10/13/CsharpClass.html

Csharp中的关键字示例及代码演示之类相关推荐

  1. Java中常见的排序算法代码演示

    package cn.xbz;import java.util.Arrays;/*** 各种排序法的演示* @author xbz**/ public class ArraySort {public ...

  2. HarmonyOS开发中四种公共事件代码演示

    目录 说些废话 环境 无序的公共事件 发布者(Project) ability_main MainAbilitySlice 订阅者(Project) ability_main MyCommonEven ...

  3. property中的关键字

    property中的关键字 示例: 1 @property (nonatomic, strong)NSString *name; 2 @property (nonatomic, assign)NSIn ...

  4. java中default关键字_Java 中的 default 关键字及代码示例

    本文通过代码示例介绍如何在 Java 中使用 default 关键字. 基本上,有 3 个地方可以使用 Java 中的 default 关键字: 在 switch case 语句中指定默认值 在 Ja ...

  5. Java中的Volatile如何工作? Java中的volatile关键字示例

    如何在Java中使用Volatile关键字 在Java采访中,什么是volatile变量以及何时在Java中使用volatile变量是Java 采访中一个著名的多线程采访问题 . 尽管许多程序员都知道 ...

  6. C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)

    C++中 map的了解与基本用法(代码演示) 一:map的基本认识 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值) ...

  7. RabbitMQ中7种消息队列和保姆级代码演示!

    blog.csdn.net/qq_32828253/article/details/110450249 七种模式介绍与应用场景 简单模式(Hello World) 做最简单的事情,一个生产者对应一个消 ...

  8. 一起Talk IOS吧(第八回 OC中复合类型的代码演示)

    看官们,我们在第三回中介绍了OC中的复合类型,有看官说介绍的不够详细,因此我使用图形的方式对所有基本类型做了总结,请参考以下图片中的内容. 看完类型的总结后,我们将通过具体的代码来演示如何使用这些类型 ...

  9. python画图代码星星-Python中turtle作图示例

    在Python里,海龟不仅可以画简单的黑线,还可以用它画更复杂的几何图形,用不同的颜色,甚至还可以给形状填色. 一.从基本的正方形开始 引入turtle模块并创建Pen对象: >>> ...

最新文章

  1. PyTorch-Adam优化算法原理,公式,应用
  2. Linux块设备驱动(二)————块设备的体系架构
  3. Windows下Memcached的安装与配置
  4. Flink如何取代JStorm,成为字节跳动流处理唯一标准?
  5. seaborn.distplot()
  6. letecode [160] - Intersection of Two Linked Lists
  7. React之组件与模块
  8. python基础课程1(看代码看注释)--基本操作和数据类型
  9. 实验三 类和对象
  10. 剑指offer面试题[3]-二维数组的查找
  11. vue better-scroll 下拉上拉,加载刷新
  12. linux查询文件md5sum,Linux下通过md5sum生成MD5文件校验MD5
  13. git简介以及windows下的git安装配置gitgub推送
  14. U盘文件夹变成.exe文件的解决方法
  15. html5用语义元素做旅游网站,HTML5语义元素
  16. 记一次硬盘坏道问题的处理
  17. swiper 弹出图片_结合swiper使用图片懒加载
  18. 手机学二级计算机,计算机二级题库
  19. JAVA中三种URL连接方法
  20. Windows Server 2012 R2安装并升级Exchange2010后端服务器(LZK)

热门文章

  1. 2019年终总结---在前端的成长
  2. centos7模板机的搭建
  3. (新手向)零基础探究机器学习Crime_Prediction
  4. 耗费2月整理了大数据所有主流框架的demo代码大全
  5. cpp课程设计实验题:定义一个描述学生(Student)基本情况的类,数据成员包括姓名(name)、学号(num)、数学成绩(mathScore)、英语成绩(englishScore)、人数(coun
  6. 特征值和特征向量的理解
  7. Fabric 009 NodeJs Express安装与运行记录
  8. mac 命令行查看DNS
  9. 群晖网络不通_网络菜鸟入手Synology群晖 DS218+,求问网络安装环境几个问题?
  10. 2014游泳记录 01