zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    WebApi 接口参数:传参详解
    WebApi 身份认证解决方案:Basic基础认证
    EF 底层封装方法(供参考)
    接口和抽象类的区别
    EF Code First 连接MySql
    EntityFramework Code-First—领域类配置之DataAnnotations
    驱动基本框架和与ring3通信
    必备理论知识
    通过远程代码注入实现不死进程
    PE文件中插入程序
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4061025.html
Copyright © 2011-2022 走看看