C# 开发 —— 数组类对象接口
数组类型是从抽象基类 Array 派生的引用类型,通过new运算符创建数组并将数组元素初始化为他们的默认值
一维数组
type[] arrayname;
数组的长度不是声明的一部分,而且数组必须在访问前初始化。
foreach 语句声明一个迭代变量 —— 是数组的每个元素的只读副本
二维数组
type[,] arrayName;
int[,] arr = new int[2,2]{{1,2},{3,4}};
可使用数组的Rank属性和GetUpperBound方法获取数组的行数和列数,然后遍历数组
for (int i = ; i < arr.Rank; i++)
{
string str = "";
for (int j = ; j < arr.GetUpperBound(arr.Rank - ) + ; j++)
{
str = str + Convert.ToString(arr[i, j]) + " "; //循环输出二维数组中的每个元素
}
Console.Write(str);
Console.Write("\n");
}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("\t 键\t 值");
//遍历Hashtable哈希表中的元素并输出其键值对
foreach (DictionaryEntry dicEntry in hashtable)
{
Console.WriteLine("\t " + dicEntry.Key + "\t " + 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 = ; //为矩形宽赋值
rect1.height = ; //为矩形高赋值
Console.WriteLine("矩形面积为:" + rect1.Area());
Rect rect2 = new Rect(, ); //使用构造函数实例化矩形结构
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("编号\t 姓名");
Console.WriteLine(ID + "\t " + 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 = ;
int y = ;
return x + y;
} int ImyInterface2.Add() //显式接口成员实现
{
int x = ;
int y = ;
int z = ;
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一起使用
C# 开发 —— 数组类对象接口的更多相关文章
- 1,SFDC 开发篇 - 类对象和SOQL查询
1,类对象 & 接口 & 属性 2, Object & SOQL
- php 数组 类对象 值传递 引用传递 区别
一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...
- [转载]php 数组 类对象 值传递 引用传递 区别
一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...
- 《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口
对象vs对象变量 “对象” 描述的是一个类的具体实例,他被java虚拟机分配在 "堆" (Heap)中. “对象变量” 为一个对象的引用(对象变量的值=记载着具体对象的位置/地址) ...
- java ee开发常用类和接口
1.javax.Validation接口,做mvc传入数据验证用 2.javax.servlet接口 3.javax.datasource接口 4.javax.session接口 5.javax.ht ...
- Android开发中,那些让您觉得相见恨晚的方法、类或接口
Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...
- python开发面向对象基础:接口类&抽象类&多态&钻石继承
一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...
- Java实验项目三——职工类对象数组按照职工生日排序
Program: 修改项目三(1)中的第3题,实现比较方法,将对象数组的数据按照生日的大小给职工排序. Description:令日期类MyDate和员工类Worker类实现接口Comparable, ...
- 规则引擎集成接口(九)Java类对象
Java类对象 右键点击“对象库” —“添加java类对象”,如下图: 弹出窗体,在文本框中输入类的全名“com.flagleader.test.Test”,选择该类型后确定,如下: 显示如下,勾选上 ...
随机推荐
- 对OC中property的一点理解
最近在看即将要加入的项目的代码,看到一个protocol里包含着几个property.之前没有写过类似的代码,看到这里的时候,突然疑惑了一下,发现自己对property的理解好像有点模糊.所以回家后又 ...
- Linux 运维笔试题(一)
试题: 1.说出下列服务对应的端口或者端口对应的服务 21 23 25 873 161 111 110 53 123 2049 2.文件atime,ctime,mtime的区 ...
- 瞎折腾-CentOS 7.4 编译4.16.2版kernel 并安装
CentOS 7.4下 原内核版本: 3.10.0-693.el7.x86_64 改后内核版本: 4.16.2 系统版本: CentOS-7-x86_64-Minimal-1708.iso 运行环境: ...
- Git 内部原理 - (5)引用规格 (6) 传输协议
引用规格 纵观全书,我们已经使用过一些诸如远程分支到本地引用的简单映射方式,但这种映射可以更复杂. 假设你添加了这样一个远程版本库: $ git remote add origin https://g ...
- 前端之CSS介绍
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS的语法 CSS语 ...
- 紫书 例题 10-7 UVa 10820 (欧拉函数)
这道题要找二元组(x, y) 满足1 <= x, y <= n 且x与y互素 那么我就可以假设x < y, 设这时答案为f(n) 那么答案就为2 * f(n) +1(x与y反过来就乘 ...
- JS 中深拷贝的几种实现方法
JS 中深拷贝的几种实现方法1.使用递归的方式实现深拷贝 //使用递归的方式实现数组.对象的深拷贝 function deepClone1(obj) { //判断拷贝的要进行深拷贝的是数组还是对象,是 ...
- MapReduce JOB 的输出与输出笔记。
提高 MapReduce 价值,自定义输入和输出. 比如跳过存储到 HDFS 中这个耗时的布置. 而只是从原始数据源接受数据,或者直接将数据发送给某些处理程序. 这些处理程序在 MapReduce 作 ...
- ArcGIS api for javascript——地理处理任务-计算一个可视域
描述 本例展示了使用一个地理处理计算一个可视域(viewshed) 单击地图上的任意点查看该点5英里内能看见的所有区域.这个模型需要几秒钟来运行并反馈结果. 可视域计算是通过ArcGIS Server ...
- 书剑恩仇录online全套源代码(服务端+client+文档)
书剑恩仇录online全套源代码(服务端+client+文档).vc++开发,解压后将近10G大小,眼下网上最完整版本号,包括client源代码.服务端源代码.工具源代码.sdk.文档-- <书 ...