当前位置: 首页 > news >正文

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、基类的方法

image

image

(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

image

image

c、我们可以指定基类所使用的构造函数,用base关键字来限定,位置放在冒号的后面。它会自动寻找参数一样的构造函数进行调用。

public MyDerivedClass(int i,int j):base(i)
{
}

d、我们还可以是用this关键字在一个构造函数中,调用本类的另一个构造函数。使用方法同base。

public class MyDeriveClass:MyBaseClass
{
     public MyDeriveClass():this(5,6)
     {
     }
 
     public MyDeriveClass():base(i)
    {
    }
}

e、切记在使用构造函数时千万不能产生死循环。

 

2、析构函数

(1)在NET中使用的析构函数(由System.Object类提供)叫做Finalize()。

(2)类的析构函数用~加类名(与构造函数同名)来声明。调用这个析构函数之后,还会隐式的调用基类的析构函数。

class Mycalss
    {
        ~Mycalss()
        {

        }
    }

 

四、VS和VCE的OOP工具。

1、右边那列就有一个类视图,可以很方便的看有什么类。

image

2、对象浏览器

      在视图菜单中就可以找到

image

右下角处的窗口显示了方法签名,和方法所属的类和方法函数的总结。~!!!!

3、添加类

我们可以很简单的通过右键然后添加Class来创建对象,由于是在同一个名字空间下,所以即使在不同的文件下,也能够通用。

image

4、类图功能

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

image

 

5、类库项目

使用类库

(1)首先创建

image

(2)然后我们将文件名改一改。改成FUCK.,然后类名就会一起随着改变。

(3)我们再加入个内部类。

internal class FUCK2
    {
    }

(5)然后我们不能运行这个项目,因为没有MAIN函数这个入口点。但是我们可以选择生成菜单里的生成解决方案来生成dll文件。

(5)然后我们打开我们原来的项目

(6)添加引用项目。在项目上点击右键有添加,在里面就有了。然后找到自己刚才的类库项目,找到debug下面的dll文件加进来,然后就可以了。

(8)加上一个using+文件名,就可以使用类库里面的类啦,当然类库里面的内部类是不能使用的。

(9)如果要替换dll文件,直接把新的覆盖旧的就好了。

 

6、接口和抽象类

上面叙述的很清楚,在后面的章节再重复吧。

 

7、结构类型和类

对象是是引用类型,结构是值类型

 

8、浅度复制和深度复制

image

相关文章:

  • C#学习笔记(五)——函数
  • Google CEO 定义 Web 3.0
  • 判断字符串是否是回文字符串或者是否含有回文字符子串 (我是从两颗番茄的博客看的题目,然后自己编的) 不断学习!!...
  • DICOMDIR结构
  • MVC2 Area实现网站多级目录
  • IBM Java多线程 - 4.共享对数据的访问
  • TADOQuery池
  • Windows7问题集
  • 连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑
  • 应用开发框架之——业务规则脚本化
  • 对等计算实践: P2P 遇上 SSL
  • Sprout and the Bean
  • 数据库水平拆分和垂直拆分区别(以mysql为例)
  • 跟我一起学WCF(11)——WCF中队列服务详解
  • 第6期(江西省吉安市永丰县)县长手机信箱工作简报(自吹自擂政绩,自圆其说)
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ES6简单总结(搭配简单的讲解和小案例)
  • input的行数自动增减
  • JavaScript类型识别
  • jquery ajax学习笔记
  • JS+CSS实现数字滚动
  • js数组之filter
  • linux安装openssl、swoole等扩展的具体步骤
  • PV统计优化设计
  • Python学习之路13-记分
  • Spark RDD学习: aggregate函数
  • Vue.js源码(2):初探List Rendering
  • 彻底搞懂浏览器Event-loop
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 机器学习学习笔记一
  • 开发基于以太坊智能合约的DApp
  • 坑!为什么View.startAnimation不起作用?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微信支付JSAPI,实测!终极方案
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 《码出高效》学习笔记与书中错误记录
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​如何在iOS手机上查看应用日志
  • # 数据结构
  • #大学#套接字
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)jdk与jre的区别
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ***检测工具之RKHunter AIDE
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 连接数据库,通过数据库生成Modell
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [2018-01-08] Python强化周的第一天
  • [20190113]四校联考
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大