• C# 开发 —— 数组类对象接口


    数组类型是从抽象基类 Array 派生的引用类型,通过new运算符创建数组并将数组元素初始化为他们的默认值

    一维数组

    type[] arrayname;

    数组的长度不是声明的一部分,而且数组必须在访问前初始化。

    foreach 语句声明一个迭代变量 —— 是数组的每个元素的只读副本

    二维数组

    type[,]  arrayName;

    int[,] arr = new int[2,2]{{1,2},{3,4}};

    可使用数组的Rank属性和GetUpperBound方法获取数组的行数和列数,然后遍历数组

    for (int i = 0; i < arr.Rank; i++)
                {
                    string str = "";
                    for (int j = 0; j < arr.GetUpperBound(arr.Rank - 1) + 1; j++)
                    {
                        str = str + Convert.ToString(arr[i, j]) + " ";                //循环输出二维数组中的每个元素
                    }
                    Console.Write(str);
                    Console.Write("
    ");
                }

    int row = Convert.ToInt32(Console.ReadLine());            //定义动态数组的行数

    数组排序

    Array.Sort 对一维Array中的数组中元素进行排序,Array.Reverse 用于反转一维Array数组或部分Array数组中元素的顺序

    ArrayList 类

    位于 System.Collections 命名空间下,可以动态地添加和删除元素

    容量可根据需要自动扩充

    添加,删除,插入某一范围元素的方法

    提供将只读和固定大小包装返回到集合的方法

    ArrayList只能是一维形式

    可用数组构造ArrayList

    Add()

    Insert()

    Clear()   Remove(Object)   RemoveAt(int)  RemoveRange

    Contains () —— 是否包含

    Hashtable 哈希表

    Add Clear Remove  Contains  ContainsValue

    Hashtable hashtable = new Hashtable();            //实例化Hashtable对象
                hashtable.Add("id", "BH0001");                //向Hashtable哈希表中添加元素
                hashtable.Add("name", "TM");
                hashtable.Add("sex", "");
                Console.WriteLine("	 键	 值");
                //遍历Hashtable哈希表中的元素并输出其键值对
                foreach (DictionaryEntry dicEntry in hashtable)
                {
                    Console.WriteLine("	 " + dicEntry.Key + "	 " + dicEntry.Value);
                }
                Console.WriteLine();

    属性访问器 : get ,set

    属性不能作为ref参数或out参数传递

    自定义属性的声明方式 : 指定属性的访问级别,属性的类型,属性的名称

    class MyClass
        {
            private string id = "";                 //定义一个string类型的变量,用来记录用户编号
            /// <summary>
            ///定义用户编号属性,该属性为可读可写属性
            /// </summary>
            public string ID
            {
                get
                {
                    return id;
                }
                set
                {
                    id = value;
                }
            }
    
            private string name = "";            //定义一个string类型的变量,用来记录用户姓名
            /// <summary>
            ///定义用户姓名属性,该属性为只读属性
            /// </summary>
            public string Name
            {
                get
                {
                    return name;
                }
            }
        }

    属性的使用 : 对象名.属性名

    一个方法的名称和形参列表(形参的个数,修饰符,类型)定义了该方法的签名

    返回类型和形参名称不是方法签名的组成部分

    静态方法

    不对特定实例进行操作,在静态方法中引用 this 会编译错误

    方法的重载

    同一方法名,单方法中参数的数据类型,个数或顺序不同

    Main 是程序的入口点,唯一

    main 方法默认访问级别是private


    结构

    将多个相关的变量包装成为一个整体使用

    结构是值的类型

    向方法传递结构时,结构是通过值传递方式传递的,而非引用传递

    结构的实例化可以不使用new

    在结构中初始化实例字段是错误的

    class Program
        {
            public struct Rect                                //定义一个矩形结构
            {
                public double width;                            //矩形的宽
                public double height;                            //矩形的高
    
                public Rect(double x, double y)
                {
                    width = x;
                    height = y;
                }
    
                public double Area()
                {
                    return width * height;
                }
            }
            static void Main(string[] args)
            {
                Rect rect1;                                    //实例化矩形结构
                rect1.width = 5;                                //为矩形宽赋值
                rect1.height = 3;                                //为矩形高赋值
                Console.WriteLine("矩形面积为:" + rect1.Area());
                Rect rect2 = new Rect(6, 4);                        //使用构造函数实例化矩形结构
                Console.WriteLine("矩形面积为:" + rect2.Area());
            }
    
        }

    类定义可以在不同的源文件之间进行拆分

    继承类时,需要使用冒号加类名。当对一个类应用 sealed 修饰符时,该修饰符会组织其他类从该类继承

    virtual 修饰符不能与 private,static ,abstract 或者 override修饰符同时使用

    override 修饰符不能与 new ,static ,或者 virtual 修饰符同时使用,并且重写方法只能用于重写基类中的虚函数

    C#,继承,虚方法和重写方法组合在一起才能实现多态性



    接口

    C# 类不支持多重继承

    接口不包含方法的实现

    namespace Test02
    {
        interface ImyInterface
        {
            string ID
            {
                get;
                set;
            }
            string Name
            {
                get;
                set;
            }
            
            void ShowInfo();
        }
        class Program:ImyInterface//继承自接口
        {
            string id = "";
            string name = "";
    
            public string ID
            {
                get
                {
                    return id;
                }
                set
                {
                    id = value;
                }
            }
    
            public string Name
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
    
            public void ShowInfo()
            {
                Console.WriteLine("编号	 姓名");
                Console.WriteLine(ID + "	 " + Name);
            }
            static void Main(string[] args)
            {
                Program program = new Program();               //实例化Program类对象
                ImyInterface imyinterface = program;           //使用派生类对象实例化接口ImyInterface
                imyinterface.ID = "TM";                        //为派生类中的ID属性赋值
                imyinterface.Name = "C# 2.0从入门到应用开发";  //为派生类中的Name属性赋值
                imyinterface.ShowInfo();                       //调用派生类中方法显示定义的属性值
            }
        }
    }

    显式接口成员实现

    一个类实现了两个接口,并且这两个接口包含具有相同签名的成员

    namespace Test03
    {
        interface ImyInterface1
        {
            int Add();
        }
        interface ImyInterface2
        {
            int Add();
        }
        class myClass : ImyInterface1, ImyInterface2        //继承接口
        {
    
            int ImyInterface1.Add()                    //显式接口成员实现
            {
                int x = 3;
                int y = 5;
                return x + y;
            }
    
            int ImyInterface2.Add()                    //显式接口成员实现
            {
                int x = 3;
                int y = 5;
                int z = 7;
                return x + y + z;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                myClass myclass = new myClass();            //实例化接口继承类的对象
                ImyInterface1 imyinterface1 = myclass;        //使用接口继承类的对象实例化接口
                Console.WriteLine(imyinterface1.Add());        //使用接口对象调用接口中的方法
                ImyInterface2 imyinterface2 = myclass;        //使用接口继承类的对象实例化接口
                Console.WriteLine(imyinterface2.Add());        //使用接口对象调用接口中的方法
            }
        }
    
    }

    抽象类与抽象方法

    抽象类不能直接实例化

    抽象类不能被密封 sealed

    namespace Test04
    {
        public abstract class myClass
        {
            private string id = "";
            private string name = "";
            public string ID
            {
                get
                {
                    return id;
                }
                set
                {
                    id = value;
                }
            }
            public string Name
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
            public abstract void ShowInfo();
        }
        public class DriveClass : myClass                    //继承抽象类
        {
            public override void ShowInfo()
            {
                Console.WriteLine(ID + " " + Name);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                DriveClass driveclass = new DriveClass();        //实例化派生类
                myClass myclass = driveclass;                //使用派生类对象实例化抽象类
                myclass.ID = "BH0001";                    //使用抽象类对象访问抽象类中的编号属性
                myclass.Name = "TM";                        //使用抽象类对象访问抽象类中的姓名属性
                myclass.ShowInfo();                        //使用抽象类对象调用派生类中的方法
            }
        }
    
    }

    密封类密封方法

    用来限制扩展性

    不能被作为基类继承,但可以继承别的类或接口

    不能与abstract一起使用

  • 相关阅读:
    深度学习与Pytorch入门实战(二)Pytorch张量高阶操作
    深度学习与Pytorch入门实战(一)Pytorch张量操作
    【邱希鹏】nndl-chap2-linear_regression
    【邱希鹏】nndl-chap1-warmup
    【Deeplearning.ai 】吴恩达深度学习笔记及课后作业目录
    Sequence Model-week3编程题2-Trigger Word Detection
    Sequence Model-week3编程题1-Neural Machine Translation with Attention
    Coursera Deep Learning笔记 序列模型(三)Sequence models & Attention mechanism(序列模型和注意力机制)
    LSTM的参数return_sequences含义
    conda离线安装
  • 原文地址:https://www.cnblogs.com/sprint1989/p/3829785.html
Copyright © 2020-2023  润新知