C#复习基础-2

C#面向对象(OOP)

一、接口

interface接口。
接口成员要全部在调用接口的类中实现。
接口只有属性和抽象方法(方法不能有定义),不能写字段。

 //接口
    public interface InterfaceTest1
    {
        //属性
        string StrDtae1 { get; set; }
        string StrDtae2 { get; set; }
        //方法,抽象方法,没有方法体{}不能使用StrDtae1 等类中成员。
        void Method1(string str1,string str2,ref string resultstr);
        void Method2(string str1, string str2, ref string resultstr);
    }

    //使用接口,要把接口成员全部实现。
    public class Interfacetest11 : InterfaceTest1
    {
        private string str11 = "";
        private string str12 = "";
        string InterfaceTest1.StrDtae1 { get => str12; set => str12=value; }
        string InterfaceTest1.StrDtae2
        {
            get
            {
                return str11;
            }
            set
            {
                str11=value;
            }
        }

        void InterfaceTest1.Method1(string str1, string str2, ref string resultstr)
        {
            resultstr = str1 + str2;
        }
        void InterfaceTest1.Method2(string str1, string str2, ref string resultstr)
        {
            resultstr = str2 + str1;
        }
    }

特殊的IDisposable

    public class DisposeTest : IDisposable
    {
        public string str21 = "";
        string str22 = "";
        public DisposeTest()
        {
            Console.WriteLine("对象创建成功");
        }
        ~DisposeTest()
        {
            Console.WriteLine("对象删除成功");

        }

        public void Dispose()
        {
            Console.WriteLine("对象Dispose");
        }

    }

使用它

using(DisposeTest disposeTest1 = new DisposeTest())
{
      disposeTest.str21 = "1234str210001";  
 }

二、继承

被继承的叫父类(基类),继承的叫派生类。
对象只能派生于一个基类,但基类可以有基类
protected保护访问性,外部类是无法访问,继承类可以访问。
可以对继承的类重写。

  public class parent
    {
        //构造函数,调用Something();
        public parent()
        {
            Something();
        }
        //设置为虚拟成员。
        protected virtual void Something()
        {

        }

    }
    //继承parent
    class Child : parent
    {
        private string foo;

        public Child()
        {
            foo = "12345";
        }
        //继承过来的所以也是虚拟的。
        protected override void Something()
        {
            try
            {
                Console.WriteLine(foo.ToLower());
            }
            catch (Exception ex)
            {
                Console.WriteLine("错了"+ex.ToString());
            }

        }
    }

实例化Child对象

 //初始化实例对象。会进入异常,因为foo为null,parent类的构造函数调用的Something()是Child()的;
  Child child = new Child();

可以知道, 对象的基础构造函数在其自己的构造函数之前被调用 。
通过在对象的构造函数中进行virtual调用,您将引入一种可能性,即继承对象将在代码完全初始化之前执行代码。

抽象类(必须在派生类重写的),用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。
抽象方法不能再普通类,类要在抽象类。
类可以密封,密封的类不能作为基类。

三、多态

派生类变量可以赋值给基本类

class Program
    {
        static void Main(string[] args)
        {
            AAA aAA = new AAA();
            BBB bBB = new BBB();
             //par不能为其他的如BBB类型。否则转化失败报错。
            pareat par = aAA;
            par.StrADD("234", "345");
            
            AAA aA = (AAA)par;
            aA.StrADD("123", "456");

            Console.ReadKey();
        }
    }
    public class pareat
    {
        //属性
        protected string StrTest1 { get; set; }
        //字段
        protected string StrTest2 = "";
        //方法
        public void StrADD(string str1, string str2)
        {
            Console.WriteLine("StrADD" + str1 + str2);
        }
        抽象方法  用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。抽象方法所在类要为抽象类。
        //protected abstract void Stradd(string str1, string str2, ref string resultst);
    }
    public class AAA : pareat
    {
        public void AA(string straa)
        {
            Console.WriteLine("AA" + straa + straa);
        }
        public void StrADD(string str1)
        {
            Console.WriteLine("StrADDAA" + str1 + str1 + str1);
        }
    }
    public class BBB : pareat
    {
        public void BB(string strbb, ref string resuStraaaa)
        {
            Console.WriteLine("BB" + strbb + strbb+ strbb+ strbb);
        }
        public void StrADD(string str1)
        {
            Console.WriteLine("StrADDBB" + str1 + str1+str1);

        }
    }

接口多态
派生类会继承基类的接口。

 class Program
    {
        static void Main(string[] args)
        {
          //实例化两个对象
            DDD dDD = new DDD();
            EEE eEE = new EEE();
            //建立接口类型变量
            CCC cCC;
            //以相同的方式访问多个变量
            cCC = dDD;
            cCC.Method1("123", "456");
            cCC = eEE;
            cCC.Method1("123", "456");
            Console.ReadKey();
        }
    }
    //接口CCC
interface CCC
    {
        //方法,抽象方法,没有方法体{}。
        void Method1(string str1, string str2);
    }

    public class DDD:CCC
    {
        void CCC.Method1(string str1, string str2)
        {
            Console.WriteLine("DDD:CCC" + str1 + str2);
        }
      
    }
    public class EEE : CCC
    {
        void CCC.Method1(string str1, string str2)
        {
            Console.WriteLine("EEE:CCC" + str1 + str2);
        }

    }

四、对象关系

包含
一个类包含另一个类。我的理解就是类中实例化了另一个类。有着这个类的变量。
集合
存储多个类的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值