C#学习笔记(七)——定义类
一、C#中类的定义
1、类的定义
class Myclass
{ }
默认情况下是类是内部的,即外部的项目是不可以访问这个类,相当于加internal来修饰。但实际上是不需要加入的。
如果要指定类是公共的,可以让外部的项目访问的话,应该加上关键字public
public class MyClass
{
}
2、抽象与密封
我们可以指定类是抽象的(不能实例化),或者是密封的(不能继承)
比如说:
public abstract class MyClass
{
} public sealed class MyClass
{
}
3、继承
还可以在类的定义中指定继承,我们使用一个冒号来表示继承
public class MyClass:MyBase
{
}
PS: (1)在C#的定义中,只能有一个基类,如果继承了一个抽象类,就必须实现所继承的所有抽象成员。(除非派生类也是抽象类)
(2)编译器不允许派生类的可访问性高于基类。
4、接口
(1)接口的继承
与继承类相同,继承接口也是直接紧跟在冒号的后面。但是同时继承了类的话,那么我们就必须把继承的接口放在类的后面,用逗号隔开
如:
public class MyClass:ImyInterface
{
} public class MyClass:MyBase,ImyInterface
{
}
而且接口不像类,只能继承一个,接口可以一次性继承很多个,中间以逗号隔开。
(2)接口的定义
Interface IMyInterface
{
}
与类相同,也是默认是内部的接口,如果要成为公共的,加上public关键字即可。
5、一个demo
namespace Exercise
{
public abstract class myBase
{ } internal class Myclass:myBase
{ } public interface IMyBaseInterface
{ } internal interface IMyBaseInterface2
{ } internal interface IMyInterfae:IMyBaseInterface,IMyBaseInterface2
{ } internal sealed class MycompLexClass:Myclass,IMyInterfae
{ } class Program
{ static void Main(string[] args)
{
MycompLexClass myobj = new MycompLexClass();
Console.WriteLine(myobj.ToString());
Console.ReadKey();
}
}
}
二、System.Oject(所有的类都继承于这个类)
1、基类的方法


(1)在利用多态性的时候,GetType()是一个有用的方法,允许根据对象的类型来执行不同的操作,而不是像通常那样子,对所有的对象都执行同样的操作。
PS:利用typeof可以将类名转换为System.Type对象。
if(myobj.GetType()==typeof(MycompLexClass))
{ }
三、构造函数和析构函数
1、构造函数
(1)构造函数与包含它的类同名。如果没有参数,则是默认构造函数,如果有则是非默认构造函数。
class Mycalss
{
public Mycalss()
{
}
public Mycalss(int myint)
{
}
}
(2)构造函数的执行序列
a、首先为了实例化派生类,必须先实例化他的基类,直到实例化到System.Object(所有的类的根)为止。然后调用的顺序是从根到叶子节点。
b、一个demo


c、我们可以指定基类所使用的构造函数,用base关键字来限定,位置放在冒号的后面。它会自动寻找参数一样的构造函数进行调用。
public MyDerivedClass(int i,int j):base(i)
{
}
d、我们还可以是用this关键字在一个构造函数中,调用本类的另一个构造函数。使用方法同base。
public class MyDeriveClass:MyBaseClass
{
public MyDeriveClass():this(,)
{
} public MyDeriveClass():base(i)
{
}
}
e、切记在使用构造函数时千万不能产生死循环。
2、析构函数
(1)在NET中使用的析构函数(由System.Object类提供)叫做Finalize()。
(2)类的析构函数用~加类名(与构造函数同名)来声明。调用这个析构函数之后,还会隐式的调用基类的析构函数。
class Mycalss
{
~Mycalss()
{ }
}
四、VS和VCE的OOP工具。
1、右边那列就有一个类视图,可以很方便的看有什么类。

2、对象浏览器
在视图菜单中就可以找到

右下角处的窗口显示了方法签名,和方法所属的类和方法函数的总结。~!!!!
3、添加类
我们可以很简单的通过右键然后添加Class来创建对象,由于是在同一个名字空间下,所以即使在不同的文件下,也能够通用。

4、类图功能
同样简单的右键就可以找到这个选项。。。很快的画出结构图,也是蛮爽的。

5、类库项目
使用类库
(1)首先创建

(2)然后我们将文件名改一改。改成FUCK.,然后类名就会一起随着改变。
(3)我们再加入个内部类。
internal class FUCK2
{
}
(5)然后我们不能运行这个项目,因为没有MAIN函数这个入口点。但是我们可以选择生成菜单里的生成解决方案来生成dll文件。
(5)然后我们打开我们原来的项目
(6)添加引用项目。在项目上点击右键有添加,在里面就有了。然后找到自己刚才的类库项目,找到debug下面的dll文件加进来,然后就可以了。
(8)加上一个using+文件名,就可以使用类库里面的类啦,当然类库里面的内部类是不能使用的。
(9)如果要替换dll文件,直接把新的覆盖旧的就好了。
6、接口和抽象类
上面叙述的很清楚,在后面的章节再重复吧。
7、结构类型和类
对象是是引用类型,结构是值类型
8、浅度复制和深度复制

C#学习笔记(七)——定义类的更多相关文章
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
- Java IO学习笔记七:多路复用从单线程到多线程
作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- python3.4学习笔记(七) 学习网站博客推荐
python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...
- iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】
iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...
随机推荐
- dao、domain、service、web、vo、Model这些层的功能是什么
这些层次都是用来管理不同的代码,让代码具有更好的维护性.开发中一般采用三层架构即MVC的模式来进行开发,M:代表model,可以理解为javaBean:V:代表view,可以理解为jsp:c:代表co ...
- 【转】不得不看的两次从C++回归C的高手评论C++
不得不看的两次从C++回归C的高手评论C++ Linux之父炮轰C++:糟糕程序员的垃圾语言 Linux之父话糙理不糙 不得不看的两次从C++回归C的高手评论C++ C语言是否该扔进垃圾桶 为什么每个 ...
- [转]优化wp_head()
经过对head的优化,我的博客访问速度也快了好多,在此过程中也了解到wp_head()模板函数的作用,可以再次优化,特此记录. 步骤:加入到function.phpremove_action(‘wp_ ...
- acdream.Triangles(数学推导)
Triangles Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit Stat ...
- 用Prime31实现Google Play In-App-Blling
Android开发者想在海外赚钱,接入Google Play是不二选择,然而一堆英文文档对于像我这样的英语四级都木有过的可谓是苦恼之极.近段时间因工作需要研究了Unity接入Google Play的整 ...
- DataSnap 用TStream 传递大数据 返回流大小为-1的情况
DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的.但是很多人发现好像大小稍微大点就工作不正常了,就变相使用其它类型转换来转换去,这样便利性就失去了. 官方有篇博客很详细的介绍 ...
- ssh tar 命令把远程文件拉回来或推过去
ssh tar 命令把远程文件拉回来或推过去 2010-09-11 21:55:35 分类: LINUX 登录22后tar 压缩/var/log目录输出到标准输入通过管道传到本地22_log. ...
- C语言 单引号和双引号的区别
最近的C语言课在教字符串,貌似N多同学搞不清楚单引号和双引号的区别,有人还以为在C语言里用哪个都可以...其实C语言中的单引号和双引号含义是一点也不一样滴... 1.含义不同. 用单引号引起的一个字符 ...
- C# 代理/委托 Delegate
本文转载自努力,努力,努力 1. 委托的定义:委托是函数的封装,它代表一"类"函数.他们都符合一定的签名:拥有相同的参数列表,返回值类型.同时,委托也可以看成是对函数的抽象,是函数 ...
- Recover Rotated Sorted Array
Given a rotated sorted array, recover it to sorted array in-place. Clarification What is rotated arr ...