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一起使用

原文地址:https://www.cnblogs.com/sprint1989/p/3829785.html