C#相关知识小结

  好吧,本来想用git的,可能门槛太高,没弄明白怎么用。那我就简单挑需要注意的重点写下吧。

重载:方法名必须相同、参数列表必须不同,返回值类型可以相同也可以不同。

重写:方法名、参数列表和返回值都必须相同。

构造函数:和类名相同,如果不写,编译器会自动生成一个无参的构造函数。

作用:对象的初始化,不能显示调用,只能在创建时用new来调用。

静态构造函数:第一次实例化该类的时候调用,之后不再初始化。

注意非静态的构造函数如果有继承关系,子类构造函数调用的时候会先初始化父类。

如果有两个类

public class Base
{
a:static int number = 1;
b:int number2 = 2;
c:static Base()
d{

}
e:public Base()
f:{

}

}
public class Child : Base
{
g:static int number = 1;
h:int number2 = 2;
i:static Child()
j:{

}
k:public Child()
l:{

}

}

实例化Child的时候,初始化顺序

g i j h k a c d b e f i

里氏替换:子类可以替换父类位置,父类不能替换子类。

子类可重写父类方法:

如果没有重写,声明的是哪个类就调用哪个类型的方法。如果有重写,无论声明的是哪个类都调用子类方法。

class father
{
public virtual void dosth()
{
Console.WriteLine("father do");
}
public void dosth1()
{
Console.WriteLine("father do1");
}

}

class sun:father
{
public override void dosth()
{
//base.dosth();
Console.WriteLine("sun do");
}

public new void dosth1()
{
Console.WriteLine("sun do1");
}

}

//重写

father f = new sun();
f.dosth();
//sun do

//无重写

father f = new sun();
f.dosth1();
//father do1

抽象类不能密封。不能用static修饰。

抽象类中可以包括抽象成员也可以有非抽象成员。

抽象成员必须在抽象类中。

抽象方法不能有任何方法实现。

如果抽象类实现接口则可以把接口中的方法映射到抽象类中作为抽象方法让子类去实现,也看在抽象类中直接实现该方法。

类不能new的情况,static,构造函数私有化,抽象类

抽象类实现了把可变与不可变分离

接口是一种特殊的抽象类。定义规则,降低耦合。

没有一定关系,侧重单一的某种能力。多继承,没有具体实现,只有方法声明。

可以有方法、属性、索引器、事件。不能有字段、常量、域、构造函数、析构函数、静态成员。

接口不具备继承的任何特点,它仅仅声明能够调用的方法。

接口里没有构造函数,抽象类里有构造函数,虽然不能实例化。

抽象类:

abstract class MobileStorage
{
public abstract void Read();
public abstract void Write();
}

class MobileDisk : MobileStorage
{
public override void Read()
{
Console.WriteLine("移动硬盘正在读取");
}

public override void Write()
{
Console.WriteLine("移动硬盘正在写入");
}
}

class UDisk : MobileStorage
{
public override void Read()
{
Console.WriteLine("U盘正在读取");
}

public override void Write()
{
Console.WriteLine("U盘正在写入");
}
}

class Computer1
{
MobileStorage ms;
public MobileStorage Ms
{
get { return ms; }
set { ms = value; }
}

public void CpuRead()
{
ms.Read();
}
public void CpuWrite()
{
ms.Write();
}

}

MobileStorage ms = new  UDisk();

Computer1 computer = new Computer1();
computer.Ms = ms;
computer.CpuRead();
computer.CpuWrite();

接口:

interface IFlyable
{
void Fly();
}
interface ISpeak
{
void Speak();
}

class Bird
{
public double Wings
{ get; set; }
public void EatAndDrink()
{
Console.WriteLine("Bird类会吃喝方法");
}
}

class Bird1 : IFlyable
{
public void Fly()
{
Console.WriteLine("鸟飞的方法");
}
void IFlyable.Fly()
{
Console.WriteLine("接口的飞方法");
}
}

class MaQue : Bird, IFlyable
{
public void Fly()
{
Console.WriteLine("麻雀会飞");
}
}

IFlyable obj = new MaQue();
obj.Fly();

Bird bird = (Bird)obj;
bird.EatAndDrink();

//MaQue类型本身具备bird的方法和飞的方法。如果声明的什么类型,就只能访问到什么类型的方法。

new MaQue().EatAndDrink();
new MaQue().Fly();

Bird1 bd1 = new Bird1();
bd1.Fly(); //鸟飞的方法

IFlyable ifly = new Bird1(); //如果接口的方法显示声明了,就会执行接口的方法。
ifly.Fly(); //接口飞的方法

抽象类和接口:

interface interfaceRun
{
void Run();
}

abstract class abserson : interfaceRun
{
static string name;

public static void Hello()
{
Console.WriteLine("hello");
}

public void how()
{
Console.WriteLine("how");
}

protected abstract void smile();

public abstract void Run();

}

class xiaohai : abserson
{
public override void Run()
{
Console.WriteLine("xiaohai run");
}

protected override void smile()
{
Console.WriteLine("xiaohai smile");
}

public new void how()
{
Console.WriteLine("xiaohai how");
}

}

xiaohai xh = new xiaohai();
xh.Run();
xh.how();

abserson.Hello();//调用抽象类中非抽象成员

好了,知识点差不多就这么些,简单运用做下练习。

一个是火车购票:用了抽象、简单工厂、反射。

一个是简单的小游戏:后台存储数据用了EF。

http://files.cnblogs.com/files/buzhidaojiaoshenme/%E7%81%AB%E8%BD%A6%E8%B4%AD%E7%A5%A8.rar

http://files.cnblogs.com/files/buzhidaojiaoshenme/%E5%B0%8F%E6%B8%B8%E6%88%8F.rar

时间: 2024-10-27 21:27:37

C#相关知识小结的相关文章

【C语言】【指针相关知识小结】

1.int *p = NULL 和 *p = NULL的区别 int *p = NULL指的是将一个指针初始化为NULL,具体过程为 int *p; p = NULL. 2.&a与a的区别 int a[5]; int *p = &a;//?? int *q = a;//?? 这样的代码对吗? 解释: &a得到数组的地址. a表示数组首元素的首地址. &a的a的值一样,两个指向的位置是相同的,但是意义不同. 3.指针和数组的定义与声明 什么是声明和定义: C语言中的对象必须只

JS闭包、作用域链、垃圾回收、内存泄露相关知识小结

补充: 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 闭包的定义及其优缺点: 闭包 是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量 闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露. 闭包是javascript语言的一大

C/C++ 位域知识小结

C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存对齐全攻略–涉及位域的内存对齐原则 本文主要对位域相关知识进行了一下梳理,参考如下: C语言中的位域 史上最全的C位域总结2 C结构体之位域(位段) C/C++中以一定区域内的位(bit)为单位来表示的数据成为位域,位域必须指明具体的数目. 位域的作用主要是节省内存资源,使数据结构更紧凑. 1. 一

ssh服务及scp命令相关知识

一.linux系统ssh服务  1.什么是ssh?ssh是secure shell protocol简写,ssh是先对联机的数据包通过加密后再进行传输,确保数据安全.ssh是专门为远程登录会话和其他网络服务提供的安全性协议. 特别提醒:ssh客服端还包括scp安全拷贝命令及sftp文件传输服务,也是通过ssh协议来工作的. 二.ssh服务其他附带服务 1)检查是否安装openssl/openssh服务[[email protected] ~]# rpm -qa openssh openssh-5

社会保障相关知识

社会保障的相关知识 医疗工作算法 社保的具体构成比例为:养老保险:单位每个月为你缴纳21%,你自己缴纳8%;    医疗保险:单位每个月为你缴纳9%,你自己缴纳2%外加10块钱的大病统筹(大病统筹主要管住院这块):失业保险:单位每个月为你缴纳2%,你自己缴纳1%;    工伤保险:单位每个月为你缴纳0.5%,你自己一分钱也不要缴;    生育保险:单位每个月为你缴纳0.8%,你自己一分钱也不要缴;    住房公积金:单位每个月为你缴纳8%,你自己缴纳8% 单位每个月为你缴纳的社保比例应该是21%

关闭selinux知识小结

今天有人问我,哎,福星,关闭selinux这块我还有点蒙,能给我分析分析么? selinux是什么? 1.     我的简单理解:selinux是一套安全的机制,在学习环境下建议关闭,功能方面可以一些机制所替代.比如防火墙等系列安全措施 selinux一定要关闭么? 1.     没有基础又不愿意倘坑的小伙伴可以关闭,工作中环境大都不开启 2.     开启的坏处是使用中需要倘很多的坑,如果有面对困难的勇气,那就别管它 修改selinux运行状态的相关 setenforce  1 | 0    

AJAX跨域调用相关知识-CORS和JSONP(引)

AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常会遇到在一个页面的JS代码中,需要通过AJAX去访问另一个服务器并返回数据,这时候就会受到浏览器跨域的安全限制了. 这里要注意,如果只是通过AJAX向另一个服务器发送请求而不要求数据返回,是不受跨域限制的.浏览器只是限制不能访问另一个域的数据,即不能访问返回的数据,并不限制发送请求. 我们接下来就为

HTML入门基础教程相关知识

HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文本文档的一种简单标记语言,经常用来创建web页面.html文件是带有格式标识符和超文本链接的内嵌代码的ascii 文本文件——html结构了解. html文本是由 html命令组成的描述性文本,html 命令可以说明文字. 图形.动画.声音.表格.链接等. html网页结构包括头部 (head).主

python的list相关知识

关于list的相关知识 list01 = ['alex',12,65,'xiaodong',100,'chen',5] list02 = [67,7,'jinjiao_dawang','relax1949',53] #打印list01.list02 print(list01) print(list02) #列表截取.切片 print(list01[1]) print(list01[-2]) print(list01[1:3]) #列表重复 print(list01 * 3) #列表组合 prin