2012.7.24---C#(2)

    学习过了C#的基本属性函数后,接下来的学习我觉得比较重要。C#是一种面向对象的语言,下面复习一下面向对象中的一些名词。     类:把一些系列东西,把他们的共同的属性和方法抽象出来,给他起一个名字就是XXX类。类中定义的静态的就是属性 ,动态的方法就是功能 。

    对象:凡是能够看得见摸得着的东西就是对象,说白了就是某个类里面的一个具体的东西(成员)。在现实生活中是先有对象再有类的,万物皆对象。。但是在程序里是先有类再有对象的。C#是面向对象编程的,在程序中,一切运行的基本单位都是对象。类的定义格式:[访问修饰符] class 类名 {//类体  } 在程序里面有且只能有一类包含Main方法,这个类称之为主类。    

   int,byte,long都是一个数据类型---整数类型,class也是一个数据类型--类类型,interface是一个数据类型但他是接口类型。本身类就是一个数据类型---类类型,有这个类定义的对象是这个类型的变量。      

    创建对象过程是:就是把类里面所有的东西赋值一份,放到对象的内存空间中。那么对象方式属性和方法是自己内存空间中的。一个类可以创建n个对象,那么n个对象之间是没有任何的关系,唯一是他们产生于一个类。 类创建对象的格式如:

                      类名 对象名 = new 类名();     

类中的属性是对成员变量的一个封装,使得这个变量具有了读和写的权利。一般情况下,成员变量是私有类型,只能在类的内部使用。一般情况,属性都是用public来修饰。如果在类的外面使用,则应该把成员变量封装成属性。格式如下:    

        public 类型 属性名    

        {  get{return 成员变量;}  

           set{成员变量=value;}

        }    

访问修饰符一般有public和private,其中public:共有的,在哪里都能够用的方法;private:私有的,只能在类的内部使用,也就是对象的内存空间中使用。由private定义的变量和方法,对象不能够直接对其调用。但是可以通过间接来访问。    

       注意:以后我们所说的对象,成员和实例都代表一个意思,也就是 对象===成员===实例,从而可知:成员的变量=实例的变量=对象的变量,不难知道成员方法=成员函数=成员功能,成员方法的书写格式如下:    

             [访问修饰符] 返回值 函数名(参数列表) { }    

    构造函数是用来创建对象的。构造函数开辟出一个内存空间,这个空间放在堆里面。此时,对象就指向了这个内存空间,然后类里面的东西复制到这个空间中。构造函数是一个特殊的函数,没有返回值,构造函数名必须和类名一样。构造函数除了用来创建对象之外,还起到以下作用:初始化成员变量,使对象的多元化。默认情况下,系统会为类提供一个空的构造函数:public 类名(){}。一旦为类增加了构造函数,那么系统就不会为这个类添加一个默认的构造函数。一般情况下他的书写格式如下:[访问修饰符] 类名(构造函数名)(参数列表){  }      

        建议:无论在什么情况下,必须显示定义一个空的构造函数。     

    函数重载指得是函数可以具有相同的方法名,但是参数的类型,个数,顺序不一样的函数互为函数的重载。函数的重载是因为功能一样,但是处理的内容和方式不一样。函数的重载前提条件是函数必须在同一个类里面。     

    this关键字,this指的就是当前对象。使用this关键字可以使得参数见名知意,同时起到了成员变量和参数之间的区别。值得注意的是this关键字是多态的。    

   static关键字,通过static关键字修饰方法,变量,属性都是属于类的。只能通过类来调用,不能通过对象来访问。凡是通过static关键字修饰的方法,只能够调用有static修饰的方法和变量。但是不能够直接调用成员的变量和方法。那么成员的方法可以直接的调用Static修饰的方法和变量。建议直接通过类名来访问Static修饰的变量和方法。static修饰的变量和方法在内存中只创建一次。直到程序退出,才会消失。也就是说是谁的谁调用。   

       C#的一些新特性:       

      1,属性:可以直接写属性,而不需要成员变量,get和set也不需要实现。       

    2,创建对象:在创建对象的时候,可以直接给属性赋值。如: People p = new People(){Name="",Age=90};       

    3,通过var关键字来标示任何类型的变量,但是不是说就是若类型语言, 但是,Var定义的变量只能够在方法里面使用。。如: var s = "sss";        var p = new People();    

      4,匿名对象:可以通过new 关键字来创建一个匿名对象,这个对象没有类型。属性可以随意定义。注意,匿名对象只能通过Var关键字定义的变量来接受。      

     C#的继承:继承是用来扩展自身的功能。通过关键符号“:”来实现继承,以下这些名词意思都是相等的 父类=基类=超类=base class;子类=sub类=派生类。继承中的构造函数,默认情况下,子类中的构造函数调用的是父类的空的构造函数。如果父类中没有空的构造函数,那么子类的构造函数必须显示的调用父类中的某一个构造函数。     

     base关键:base指得是父类对象。如果base放在子类构造函数后,则base调用的是父类的构造函数。如果base在普通方法中,则指的是创建的父类对象,可以调用父类对象中的方法和属性。    

   方法的重写:由于父类的方法不能够完成某种功能,单还必须调用这个方法,则子类可以重写这个方法,加强其功能。在父类里面,如果一个函数可以让子类重写,必须在在方法的前面用vritual关键来修饰。说明这个方法可以被子类重写。同理如果在子类里面,要重写父类的方法,则应在方法前面加上override关键字,说明这个方法是重写父类的。重写方法的要求是必须有继承,重写的方法和被重写的方法必须一模一样。    

    多态是一个事物可以同时具有多种较色,但是在某一种特殊的场合只表现出一中。其中比较重要的两种转型得需要我们深入的理解一下,我就是在这方面对多态有些概念的模糊,不过通过老师的深入解析渐渐的也就参透了其中的意思。     

  (1),上转型: 把子类对象赋值给父类对象,称之为上转型。他的原理:实际上是把子类对象中的父类对象赋值了父类,此时的赋值语句两边的类型是相同的。此时,这个父类对象能够调用的方法是:自己的方法和已经重写过的方法,如果方法没有被子类重写,那么调用的还是自己的方法。他的用途是方便同一标准,根据具体实现不同,而调用不同的方法,从而实现不同的功能和样式。

如:        WuDang w = new People();      

            w.sing();//已经重写的方法。            

         w.print();//print没有重写的方法

    

  (2),下转型:把已经上转型的父类对象赋值给子类对象。他的原理:就是把已经上转型后的父类对象所对应的原来的子类对象在赋值给子类对象。此时,这个对象能够调用的方法是自身的方法,继承来得方法和已经重写过得方法。 注意,下转型需要通过显示的类型转换。如:People pp = (People) w;     

   注意:C#中只支持单继承,一个类只能有一个直接的父类。     抽象类是类的一种特殊类,他没有构造函数不可以创建对象。他的书写格式如:              

         [访问修饰符] abstract class 类名

     { //拥有了普通类出构造函数外的任何东西   

      //还可以有抽象函数               

      }     

    sealed关键字:如果sealed修饰的是类,则这个类是无法被继承,不能当父类;如果sealed修饰方法,则子类是无法重写这个方法的。     

    interface接口是为了解决多继承的问题而诞生的一种特殊的“类”,接口里面只能写方法的定义和属性的定义。在接口中的方法定义前面不能含有public,子类在实现接口的方法是,不能使用override关键字。他的书写格式如:      

          pubilc interface 接口名 { }       

   注意:如果一个类同时要继承类也要实现结构,那么父类要写在前面,接口在后。     

    protected关键字:由protected关键字修饰的变量和方法只能在本类和子类中去使用,不能通过对象来访问。     

    namespace命名空间是为了解决重名的问题,方便管理类而产生的,命名空间只能够放,类,接口,枚举,结构体,委托 而不能有方法,变量的。命名空间是可以嵌套的,命名空间于物理路径没有关系,只和逻辑上有关系。他的书写格式如:

         namespace 名字{  }       

    enum枚举:把有限的元素放在一起。使用字母代替数字标示的含义。枚举是一个值类型。

下面是一个很容易理解的继承例子,他帮助我很明了的理解C#的继承关系:

using System;
public class StudyExtend1
{public static void Main(){People p = new People("ss");p.Test();p.TaiJi();
} }
public class WuDang {private string name;public WuDang(){}public WuDang(string name){Console.WriteLine("I'm First!");}public WuDang(int age){Console.WriteLine("I'm First!");}public WuDang(string name,int age){}public string Name{get{return this.name;}set{this.name = value;}}public void Taiji(){Console.WriteLine(this.name);Console.WriteLine(this.GetType());} } //People继承了武当 public class People : WuDang {public People(string name):base("ss",67){Console.WriteLine("I'm Second!");}public void Test(){base.Taiji();base.Name ="ss";}}

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/lan-net/archive/2012/07/29/2614344.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编语言-001(BYTE、DUP、WORD 、DWORD 、QWORD 、TBYTE 、REAL )

1 : 基础汇编语言展示 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov eax,5add eax,6INVOKE ExitProcess,0 main ENDP END main2:基础汇编语言展示增加变量的访问 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dw…

<各国地图轮廓app>技术支持

如在app使用过程中遇到任何问题,请与开发者联系caohechunhotmail.com

Java BigDecimal longValueExact()方法与示例

BigDecimal类longValueExact()方法 (BigDecimal Class longValueExact() method) longValueExact() method is available in java.math package. longValueExact()方法在java.math包中可用。 longValueExact() method is used to convert this BigDecimal to an exact long val…

c#中的多线程同步

在处理多线程同步问题的时候,我们一般有临界区,互斥量,信号量和消息机制等几种解决方案,在c#中可以非常方便的使用它们来实现进程的同步。下面我就常用的lock,Monitor和Mutex几种来说明如何实现进程的同步。 lock和Monitor依靠一种…

ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“

windows下: ffplay 提示"SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can’t initialize audio client" 添加环境变量:SDL_AUDIODRIVERdirectsound

js 正则表达式,正整数

var ss "3.333";var type /^[0-9]*[1-9][0-9]*$/;var re new RegExp(type);alert(ss.match(re));if (ss.match(re) null) {alert("请输入大于零的整数!");return;} 转载于:https://www.cnblogs.com/lingxzg/archive/2012/08/02/2620543.html

java 根据类名示例化类_Java即时类| EpochSecond()方法的示例

java 根据类名示例化类EpochSecond()方法的即时类 (Instant Class ofEpochSecond() method) Syntax: 句法: public static Instant ofEpochSecond(long sec_val);public static Instant ofEpochSecond(long sec_val, long nanos_adjust);ofEpochSecond() method is…

java中Date()类型输入数据的处理

对于Date类型的数据,需要输入生日存入相应数据库中 private Date birthday;// 生日package com.pdsu.mybatis.pojo;import java.io.Serializable; import java.util.Date;public class User implements Serializable {/*** */private static final long serialVers…

(扩展)欧几里德快速幂

GCD模板 __int64 gcd(__int64 a,__int64 b) {return b0? a:gcd(b,a%b); } 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基本性质: gcd(a,…

汇编语言-002(.data、Equal、$、EQU 、MOV 、MOVSX、MOVZX)

1:变量相加程序 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data firstval DWORD 20002000h secondval DWORD 11111111h thirdval DWORD 22222222h sum DWORD 0.code main PROCmov eax,firstvaladd eax,secondvaladd eax,thirdvalm…

\r与\n的区别,\r\n与\n或\r的区别(C语言/C#)

本文出处http://topic.csdn.net/t/20020718/07/882679.html 原作者:triout(笨牛) \r表示回车,\n表示换行,我们按回车按钮的时候,系统自动产生回车和换行两个字符: 回车仅仅是表示完成,把光…

通过ID查询一个用户的两种开发方法

通过ID查询一个用户的两种开发方法 数据库建表sql语句如下:https://github.com/beyondyanyu/Sayingyy/blob/master/JDBC2-数据库sql建表语句 ①,原始Dao开发: UserDao.java(接口): package com.pdsu.mybatis.dao;i…

duration java_Java Duration类| minusMinutes()方法与示例

duration java持续时间类minusMinutes()方法 (Duration Class minusMinutes() method) minusMinutes() method is available in java.time package. minusMinutes()方法在java.time包中可用。 minusMinutes() method is used to subtract the given duration in minutes from t…

Silverlight + WCF异步调用 例子

看大家好像对我的NParsing框架不是很感兴趣(写NParsing帖没人顶我),那就给大家来点“甜品”,换换口谓。来说说Silverlight方面的东西。 在Silverlight中数据通信只能用异步。有人会觉得写起来很麻烦,其实不然。也有很简…

我博客主页的搜索功能怎么不好用

用博客里面的搜索功能,“找找看”,搜索我博客里面的关键字,但是不能出现结果。但是我在别人的主页上能够搜索该人的内容,能够查询到记录,难道博客园对每个博客的信息要先排序?目前我的还不在他的搜索数据库…

小议SqlMapConfig.xml配置文件

①、mybatis-3-config.dtd 主要用于mybatis的核心配文件sqlMapConfig.xml的约束 sqlMapConfig.xml代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&q…

ffmepg 命令提取音视频数据

原文件&#xff1a; 1&#xff1a; 原音频数据提取&#xff08;保留还是mp4的封装格式的&#xff09;&#xff1a; ffmpeg -i test_1920x1080.mp4 -acodec copy -vn audio.mp4 -vn 就是没有视频&#xff0c; -acodec copy 音频拷贝不进行任何转码 原视频数据提取&#xff0…

Java BigInteger类| modInverse()方法与示例

BigInteger类modInverse()方法 (BigInteger Class modInverse() method) modInverse() method is available in java.math package. modInverse()方法在java.math包中可用。 modInverse() method is used to calculate the mod inverse by using the inverse of (this BigInteg…

【7】jQuery学习——入门jQuery选择器之过滤选择器-可见性过滤选择器

这篇什么都不说&#xff0c;看标题就知道了&#xff0c;很简单&#xff0c;就2个选择器&#xff0c;嘿嘿 选择器描述返回$("Element:hidden")选取所有不可见的元素集合元素$("Element:visible")选取所有可见元素集合元素这篇很简单吧&#xff0c;就2个&…

Creating an undraggable TitleWindow container in Flex (转载)

The following examples show how you can create an undraggable TitleWindow container by setting the isPopUp property to false on the TitleWindow instance. <?xml version"1.0" encoding"utf-8"?><!-- http://blog.flexexamples.com/2…