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

一维数组

type[] arrayname;

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

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

二维数组

type[,]  arrayName;

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

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

  1. for (int i = ; i < arr.Rank; i++)
  2. {
  3. string str = "";
  4. for (int j = ; j < arr.GetUpperBound(arr.Rank - ) + ; j++)
  5. {
  6. str = str + Convert.ToString(arr[i, j]) + " "; //循环输出二维数组中的每个元素
  7. }
  8. Console.Write(str);
  9. Console.Write("\n");
  10. }

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

  1. Hashtable hashtable = new Hashtable(); //实例化Hashtable对象
  2. hashtable.Add("id", "BH0001"); //向Hashtable哈希表中添加元素
  3. hashtable.Add("name", "TM");
  4. hashtable.Add("sex", "男");
  5. Console.WriteLine("\t 键\t 值");
  6. //遍历Hashtable哈希表中的元素并输出其键值对
  7. foreach (DictionaryEntry dicEntry in hashtable)
  8. {
  9. Console.WriteLine("\t " + dicEntry.Key + "\t " + dicEntry.Value);
  10. }
  11. Console.WriteLine();

属性访问器 : get ,set

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

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

  1. class MyClass
  2. {
  3. private string id = ""; //定义一个string类型的变量,用来记录用户编号
  4. /// <summary>
  5. ///定义用户编号属性,该属性为可读可写属性
  6. /// </summary>
  7. public string ID
  8. {
  9. get
  10. {
  11. return id;
  12. }
  13. set
  14. {
  15. id = value;
  16. }
  17. }
  18.  
  19. private string name = ""; //定义一个string类型的变量,用来记录用户姓名
  20. /// <summary>
  21. ///定义用户姓名属性,该属性为只读属性
  22. /// </summary>
  23. public string Name
  24. {
  25. get
  26. {
  27. return name;
  28. }
  29. }
  30. }

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

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

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

静态方法

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

方法的重载

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

Main 是程序的入口点,唯一

main 方法默认访问级别是private


结构

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

结构是值的类型

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

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

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

  1. class Program
  2. {
  3. public struct Rect //定义一个矩形结构
  4. {
  5. public double width; //矩形的宽
  6. public double height; //矩形的高
  7.  
  8. public Rect(double x, double y)
  9. {
  10. width = x;
  11. height = y;
  12. }
  13.  
  14. public double Area()
  15. {
  16. return width * height;
  17. }
  18. }
  19. static void Main(string[] args)
  20. {
  21. Rect rect1; //实例化矩形结构
  22. rect1.width = ; //为矩形宽赋值
  23. rect1.height = ; //为矩形高赋值
  24. Console.WriteLine("矩形面积为:" + rect1.Area());
  25. Rect rect2 = new Rect(, ); //使用构造函数实例化矩形结构
  26. Console.WriteLine("矩形面积为:" + rect2.Area());
  27. }
  28.  
  29. }

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

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

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

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

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



接口

C# 类不支持多重继承

接口不包含方法的实现

  1. namespace Test02
  2. {
  3. interface ImyInterface
  4. {
  5. string ID
  6. {
  7. get;
  8. set;
  9. }
  10. string Name
  11. {
  12. get;
  13. set;
  14. }
  15.  
  16. void ShowInfo();
  17. }
  18. class Program:ImyInterface//继承自接口
  19. {
  20. string id = "";
  21. string name = "";
  22.  
  23. public string ID
  24. {
  25. get
  26. {
  27. return id;
  28. }
  29. set
  30. {
  31. id = value;
  32. }
  33. }
  34.  
  35. public string Name
  36. {
  37. get
  38. {
  39. return name;
  40. }
  41. set
  42. {
  43. name = value;
  44. }
  45. }
  46.  
  47. public void ShowInfo()
  48. {
  49. Console.WriteLine("编号\t 姓名");
  50. Console.WriteLine(ID + "\t " + Name);
  51. }
  52. static void Main(string[] args)
  53. {
  54. Program program = new Program(); //实例化Program类对象
  55. ImyInterface imyinterface = program; //使用派生类对象实例化接口ImyInterface
  56. imyinterface.ID = "TM"; //为派生类中的ID属性赋值
  57. imyinterface.Name = "C# 2.0从入门到应用开发"; //为派生类中的Name属性赋值
  58. imyinterface.ShowInfo(); //调用派生类中方法显示定义的属性值
  59. }
  60. }
  61. }

显式接口成员实现

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

  1. namespace Test03
  2. {
  3. interface ImyInterface1
  4. {
  5. int Add();
  6. }
  7. interface ImyInterface2
  8. {
  9. int Add();
  10. }
  11. class myClass : ImyInterface1, ImyInterface2 //继承接口
  12. {
  13.  
  14. int ImyInterface1.Add() //显式接口成员实现
  15. {
  16. int x = ;
  17. int y = ;
  18. return x + y;
  19. }
  20.  
  21. int ImyInterface2.Add() //显式接口成员实现
  22. {
  23. int x = ;
  24. int y = ;
  25. int z = ;
  26. return x + y + z;
  27. }
  28. }
  29. class Program
  30. {
  31. static void Main(string[] args)
  32. {
  33. myClass myclass = new myClass(); //实例化接口继承类的对象
  34. ImyInterface1 imyinterface1 = myclass; //使用接口继承类的对象实例化接口
  35. Console.WriteLine(imyinterface1.Add()); //使用接口对象调用接口中的方法
  36. ImyInterface2 imyinterface2 = myclass; //使用接口继承类的对象实例化接口
  37. Console.WriteLine(imyinterface2.Add()); //使用接口对象调用接口中的方法
  38. }
  39. }
  40.  
  41. }

抽象类与抽象方法

抽象类不能直接实例化

抽象类不能被密封 sealed

  1. namespace Test04
  2. {
  3. public abstract class myClass
  4. {
  5. private string id = "";
  6. private string name = "";
  7. public string ID
  8. {
  9. get
  10. {
  11. return id;
  12. }
  13. set
  14. {
  15. id = value;
  16. }
  17. }
  18. public string Name
  19. {
  20. get
  21. {
  22. return name;
  23. }
  24. set
  25. {
  26. name = value;
  27. }
  28. }
  29. public abstract void ShowInfo();
  30. }
  31. public class DriveClass : myClass //继承抽象类
  32. {
  33. public override void ShowInfo()
  34. {
  35. Console.WriteLine(ID + " " + Name);
  36. }
  37. }
  38. class Program
  39. {
  40. static void Main(string[] args)
  41. {
  42. DriveClass driveclass = new DriveClass(); //实例化派生类
  43. myClass myclass = driveclass; //使用派生类对象实例化抽象类
  44. myclass.ID = "BH0001"; //使用抽象类对象访问抽象类中的编号属性
  45. myclass.Name = "TM"; //使用抽象类对象访问抽象类中的姓名属性
  46. myclass.ShowInfo(); //使用抽象类对象调用派生类中的方法
  47. }
  48. }
  49.  
  50. }

密封类密封方法

用来限制扩展性

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

不能与abstract一起使用

C# 开发 —— 数组类对象接口的更多相关文章

  1. 1,SFDC 开发篇 - 类对象和SOQL查询

    1,类对象 & 接口 & 属性   2, Object & SOQL    

  2. php 数组 类对象 值传递 引用传递 区别

    一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...

  3. [转载]php 数组 类对象 值传递 引用传递 区别

    一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...

  4. 《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口

    对象vs对象变量 “对象” 描述的是一个类的具体实例,他被java虚拟机分配在 "堆" (Heap)中. “对象变量” 为一个对象的引用(对象变量的值=记载着具体对象的位置/地址) ...

  5. java ee开发常用类和接口

    1.javax.Validation接口,做mvc传入数据验证用 2.javax.servlet接口 3.javax.datasource接口 4.javax.session接口 5.javax.ht ...

  6. Android开发中,那些让您觉得相见恨晚的方法、类或接口

    Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...

  7. python开发面向对象基础:接口类&抽象类&多态&钻石继承

    一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...

  8. Java实验项目三——职工类对象数组按照职工生日排序

    Program: 修改项目三(1)中的第3题,实现比较方法,将对象数组的数据按照生日的大小给职工排序. Description:令日期类MyDate和员工类Worker类实现接口Comparable, ...

  9. 规则引擎集成接口(九)Java类对象

    Java类对象 右键点击“对象库” —“添加java类对象”,如下图: 弹出窗体,在文本框中输入类的全名“com.flagleader.test.Test”,选择该类型后确定,如下: 显示如下,勾选上 ...

随机推荐

  1. Django分页和查询参数的问题

    查询是通过get的方式,之前没有分页之前,url是这样的: http://hostname/search?query=port%3A8080 那么我的想法是如果分页了. 1,不带page参数了.nex ...

  2. sql笔试题-1

    在oracle下sql:比较巧妙地是group by 部分 E from (select a.team,b.y from nba a,nba b ) c group by (c.y-rownum) o ...

  3. windows 实用DOS命令。

    1. findfind方法要比findstr要简单,参数要少.find /? 命令可以查看所有find命令的参数.find命令的基本格式是这样的:find "要查找的字符串" 要查 ...

  4. [BeiJing2009 WinterCamp]取石子游戏 Nim SG 函数

    Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...

  5. kubernetes学习与实践篇(二) kubernetes1.5 的安装和集群环境部署

    kubernetes 1.5 的安装和集群环境部署 文章转载自:http://www.cnblogs.com/tynia/p/k8s-cluster.html 简介: Docker:是一个开源的应用容 ...

  6. [洛谷P1343]地震逃生

    题目大意:有n个点m条单向边,每条边有一个容量.现有x人要分批从1走到n,问每批最多能走多少人,分几批运完(或输出无法运完). 解题思路:一看就是网络流的题目.每批最多能走多少人,即最大流.分几批运完 ...

  7. 石子合并 (区间DP)

    一.试题在一个园形操场的四周摆放N堆石子(N≤100),现要将石子有次序地合并成一堆.规定每次仅仅能选相邻的两堆合并成新的一堆,并将新的一堆的石子数.记为该次合并的得分.编一程序.由文件读入堆数N及每 ...

  8. Spring可扩展Schema标签

    基于Spring可扩展Schema提供自己定义配置支持 http://blog.csdn.net/cutesource/article/details/5864562 WARN : org.sprin ...

  9. 字符串匹配:KMP

    參考:从头到尾彻底理解KMP 在字符串 str 中 匹配模式串 pattern 1. 计算模式串的 next 数组: 2. 在字符串中匹配模式串:当一个字符匹配时,str[i++], pattern[ ...

  10. iOS xib View宽高不能改变

    IOS - xib(Interface Builder,view) - can't change view size(view不能改变大小问题) 今天在试着swift语言写个demo,,当中遇到了这个 ...