C#基础 基本语法4

1、除了基本的OOP技术,还要熟悉一些比较高级的技术。集合、比较、转换。
System.Collections名称空间中的几个接口提供了基本的集合功能。
IEnumberable;ICollection;IList;IDictionnary
2、
ArrayList animalArrayList=new ArrayList();

------------------------------------------------------------------------------------------

第十章
1、
public:
private:成员只能由类中的代码访问。
internal:只能由定义它的项目内部代码访问。
protected:只能由类或派生类中的代码访问。//只能由项目中派生类的代码来访问。
2、.NET Framework中的公共字段以PascalCasing来命名,而不是camelCasing
定义字段
class MyClass
{
public int MyInt;
}

class MyClass
{
public readonly int MyInt=17;//只在执行构造函数的过程中赋值,或由初始化语句赋值
}

class MyClass
{
public static int MyInt;//可以用static关键字声明为静态;静态字段必须通过定义它们的类来访问,而不是通通过这个类的对象实例来访问。const成员是静态的,所以不需要用static修饰符。
}
3、定义方法
class MyClass
{
public string GetString()
{
return "Here is a string.";
}
如果使用了static关键字,这个方法就只能通过类来访问。不能通过对象实例来访问。
也可以在方法定义中使用
virtual:方法可以重写
abstract:方法必须在非抽象的派生类中重写(只用于抽象类中)
override:方法重写了一个基类方法(如果方法重写就必须使用该关键字)
extern:方法定义放在其他地方。
}
重写::::::::
public class MyBaseClass
{
public virtual void DoSomething()
{
//Base implementation.
}

public class MyDerivedCalss:MyBaseClass
{
public override void DoSomething(){
//Derived class implementation,override base implementation.
}
//如果使用了override 也可以使用sealed指定在派生类中不能对这儿方法进一步修改
//public override sealed void DoSomething(){
// .......
//}
}

4、属性拥有两个类似于函数的快,一个快获取属性的值,另一个用于设置属性的值。也称为访问器
分别用get、set关键字来定义。可以忽略其中一个块来创建只读或只写属性(忽略get块创建只写属性,忽略set块创建只读属性)
private int myInt;
public int MyIntProp//可以是public或private
{
get{return myInt;}//get字段必须有一个属性类型的返回值,简单的属性一般与私有字段相关联,以控制对这个字段的访问,此时get块可以直接返回该字段的值。
set{myInt =value;}//set以类似的方式把一个值赋值给字段。Value等于类型与属性相同的类型,就不必担心数据类型转换了。
}
//这个简单的属性只能直接访问myInt字段。在对操作进行更多的控制时,属性的真正作用才发挥出来。
set
{
if(value>=0&&value<=10)//只有赋值属性的值在0-10之间,才会改为myInt
myInt=value;
}
//如果使用了无效值1、什么也不错2、给字段赋值默认值3、继续执行4、抛出异常
set
{
if(value>=0&&value<=10)//只有赋值属性的值在0-10之间,才会改为myInt
myInt=value;
else
throw(new ArgumentOutOfRangeException("MyIntProp",value,"MyIntProp must be assigned a value between 0 and 10."))
}
-------------------------------------------
private int MyInt;
public int MyIntProp{
get{return myInt;}
protected set{myInt =value;}//只有在类或派生类的代码才能使用set访问器。
}
5、自动属性
public int MyIntProp{get;set;}//我们按照通常的方式定义属性的可访问性、类型和名称,但没有给get,set块提供实现的代码(和底层的字段)都由编译器提供。自动属性的唯一限制是它们必须包含get set存取器,无法使用这种方式定义只读只写属性。
6、public class MyBaseClass
{
public void DoSomething()
{
//Base implementation;
}
}

public class MyDerivedClass:MyBaseClass
{
public void DoSomething()
{
//Derived class implementation,hides base implementation.
}
}
//这段代码可以正常运行,但是会产生警告,说明隐藏了一个基类成员。如果无意间隐藏此时可以改正错误,如果确实要隐藏,要用new关键字显示的表明意图。
public class MybaseClass
{
public void DoSomething()
{
//Base implementation;
}
}

public class MyDerivedClass:MyBaseClass
{
new public void DoSomething()
{
//Derived class implementation,hides base implementation.
}
}
---------------------------注意隐藏基类成员和重写他们的区别
public class MybaseClass
{
public virtual void DoSomething()
{
Console.WriteLine("Base imp");
}
}

public class MyDerivedClass:MyBaseClass
{
public override void DoSomething()
{
Console.WriteLine("Derived imp");
}
}//重写方法将替换基类中的实现代码,这样代码将使用新版本,即使通过基类类型进行的,情况也是这样的(使用多态性)
MyDerivedClass myObj=new MyDerivedClass();
MyBaseClass myBaseObj;
myBaseObj=myObj;
myBaseObj=DoSomething();//结果也是Deried imp
-----------------------------------------------使用下面代码隐藏基类方法
public class MybaseClass
{
public virtual void DoSomething()
{
Console.WriteLine("Base imp");
}
}

public class MyDerivedClass:MyBaseClass
{
new public void DoSomething()
{
Console.WriteLine("Derived imp");//基类方法不一定是虚拟的,结果为Base imp
}
}
7、调用重写或隐藏的基类方法
无论是重写成员还是隐藏成员,都可以在派生类的内部访问基类成员。在许多情况下都很有用的。
1、要对 派生类的用户隐藏继承的公共成员,但仍能在类总访问其功能
2、要给继承的虚拟成员添加实现代码,而不是简单地用重写的新执行的代码替换它。
public class MybaseClass
{
public virtual void DoSomething()
{
Console.WriteLine("Base imp");
}
}

public class MyDerivedClass:MyBaseClass
{
public override void DoSomething()
{
base.DoSomething();
}
}
//MyBaseClass是MyDrerivedClass的基类,而DoSomething()版本包含在MyDrivedClass中,因为base使用的是对象实例,所以静态成员中使用它会产生错误
8、this关键字最常用的事把当前对象实例的引用传递给一个方法
public void DoSomething()
{
MyTargetClass myObj=new MyTargetClass();
myobj=DoSomethingWith(this);
}
还有一个方法是限定本地类型成员。
public class MyClass
{
private int someData;
public int SomeData
{
get
{
return this.someData;//一眼就看出引用的是成员
}
}
}
9、接口-成员-的定义:
不允许使用访问修饰符public,private,protected,internal所有的接口成员都是公共的。
接口成员不能包含代码体
接口不能定义字段成员
接口成员不能用关键字static,virtual,abstract,sealed来定义
类型定义成员是禁止的。
-----------------------------------------------------------------------------------------
interface IMyBaseInterface
{
void DoSomething();
}
interface IMyDerivedInterface:IMyBaseInterface
{
new void DoSomething();
}//执行方式与隐藏继承的类成员的方式一样,接口中定义的属性可以定义访问块get,set中的哪一个用于该属性
10、interface IMyInterface
{
int MyInt{get;set;}//int属性MyInt有get,set存取器对于访问级别有更严格的限制来说,可以省略他们任何一个//类似自动属性,但自动属性是为类定义的,自动属性必须包含get,set存取器
}
//接口没有指定如何存储属性数据接口不能指定字段。接口与类一样,可以定义为类的成员但不能定义为其他接口的成员,因为接口不包含类型定义。

11、类中实现接口
类中实现接口必须包含该接口所有成员的实现代码,且必须匹配指定的签名,包括匹配指定的get,set块,并且必须是公共的。
public interface IMyInterface
{
void DoSomething();
void DoSomethingElse();
}
public class MyClass:IMInterface
{
public void DoSomething()
{
}
public void DoSomething()
{
}
}
------------------------------------------------------------------------------------
可以使用关键字virtual或abstract实现接口成员,但不能使用static或const。
//可以在基类上实现接口
public interface IMyInterface
{
void DoSomething();
void DoSomethingElse();
}
public class MyBaseClass()
{
public void DoSomething()
{
}
}
public class MyDerivedClass:MyBaseClass,IMyInterface
{
public void DoSomethingElse()
{
}
}
//P223
12、隐式的实现接口成员
MyClass myObj=new MyClass();
myObj.DoSomething();
或者
MyClass myObj=new MyClass();
IMyInterface myInt=myObj;
myInt.DoSomething();
显示的实现接口成员
public class MyClass:IMyInterface
{
void IMyInerface.DoSomething()//DoSomething是显示的实现
{
}
public void DoSomethingElse()//是隐式的实现,只有这个可以通过MyClass的对象实例来访问
{
}
}
13、用非公共的可访问性添加属性存储器
public interface IMyInterface
{
int MyIntProperty
{
get;
}
}
public class MyBaseClass:IMyInterface
{
public int MyIntProperty{get;protected set;}
}
14、部分类的定义//如果使用部分类定义,partial关键字就必须出现在包含在定义部分的每个文件的于此相同的位置。
public partial clss MyClass
{
............
}
------------------------------------------------------------------------
public partial class MyClass:IMyInterface1
{
......
}
public partial class MyClass:IMyInterface2
{
......
}
和public class Myclass:IMyInerface1,IMyInterface2
{
......
}//等价的
15、部分方法在部分类中定义,但没有方法体,但在另一个部分类中包含实现代码,这两个类中都要使用pratial关键字。
public partial class Myclass
{
prrtial void MyPartialMethod();
}
public partial class MyClass
{
partial void MyPartialMethod()
{
//Method implementation
}
}
//部分方法也可以是静态的,但他们总是私有的,且不能有返回值,他们使用的任何参数都不能是out参数,但可以是ref参数。部分方法也不能使用virtual,abstract,override,new,sealed,extern修饰符
部分方法编译时重要,用法不重要。
public partial classMyClass
{
public void DoSomethingElse();
public void DoSomething()
{
Console.WriteLine("DoSomething() execution started.");
DoSomethingElse();
Console.WriteLine("DoSomething() exexution finished.");
}
}

public partical class MyClass
{
partial void DoSomethingElse()
{
Console.WriteLine("DoSomethingElse() calles.");
}
}//第一个部分类定义和调用部分方法DoSomethingElse,在第二个部分类中实现它,结果为
DoSomething() execution started.
DoSomething() called.
Dosomething() execution finished.

------------------------------------------------------------------------------------------

 

转载于:https://www.cnblogs.com/d685600/p/3650365.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验15 安装新的int 9中断例程

这个实验综合了外中断&#xff0c;内中断&#xff0c;应该是全书最精华的一个实验&#xff0c;常常思考整个程序的流程&#xff0c;指导这个流程觉得熟悉、自然。 代码如下&#xff1a; assume cs:code, ss:stackstack segmentdb 128 dup(0) stack endscode segment start:mov…

前端学习(1048):todolist正在进行和已经完成阶段

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>todoList待办事项</title><script src"…

一个web版的计算器

非小白勿入&#xff01;&#xff01;&#xff01; emmmm&#xff0c;最近写js作业复习题&#xff0c;有个计算器的题目&#xff0c;我就拿来啦&#xff0c;哈哈哈。 想着html也是一种良好的界面嘛&#xff0c;还可以手动改变(js)&#xff0c;哈哈哈&#xff0c;就有此了。 关键…

JavaScript之常用方法讲解

1.indexOf() 定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 语法 stringObject.indexOf(searchvalue,fromindex) 参数描述searchvalue必需。规定需检索的字符串值。fromindex可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 …

实验16 编写包含多个功能子程序的中断例程

本实验是本书的第二个精华的实验。到此可以总结&#xff0c;汇编的重点在于跳转&#xff0c;这里的跳转包括jmp&#xff0c;call&#xff08;调用&#xff09;&#xff0c;int&#xff08;中断&#xff09;&#xff0c;这反映到操作系统上就是调用&#xff0c;线程、进程的切换…

前端学习(1049):todolist正在进行和已经完成阶段2

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>todoList待办事项</title><script src"…

终于学会上传图片了\( ̄︶ ̄*\))

actionbigItem要点使用smartupload jar 包html 表单提交数据有三种类型的提交bigItem 做项目&#xff0c;发现了一个技术难点。 要上传图片到服务器。 要点 1&#xff0c;smartupload jar 包下载。 2&#xff0c;部署jar包 使用smartupload jar 包 Jsp页面操作 <html…

逐个字符输出

num raw_input(input is : )#用户输入for i in range(len(num)): #循环取字符输出 print num[i] for i,ch in enumerate(num):#使用enumerate&#xff08;&#xff09;函数 print ch 转载于:https://www.cnblogs.com/timp/p/3652972.html

x86从实模式到保护模式实验说明

在做完王爽《汇编语言》所有实验后&#xff0c;到这里进入到操作系统的层面了。作为一个数学系的研究生自学计算机&#xff0c;摸索了很长时间后&#xff0c;感觉一个靠谱的路线是&#xff1a;先学会一门语言对计算机有一个感觉&#xff0c;能做点事情--》再学点数据结构&#…

前端学习(1050):todolist正在进行个数和已完成个数

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>todoList待办事项</title><script src"…

第一次体验python有感

python解释器python学习工具pycharmpython的类库&#xff08;numpy matplotlib&#xff09; python是一门动态型的语言&#xff0c;无需变量&#xff0c;有值&#xff0c;它自动确认变量&#xff0c;类库及其强大&#xff0c;丰富&#xff0c;几句代码&#xff0c;便可做出东西…

SQL - 将NULL设置为 NOT NULL

在有些时候&#xff0c;我们在创建表的时候&#xff0c;会忘掉设置某一个列的属性&#xff0c;比如忘了设置为非空&#xff0c;但是默认情况下系统会自动的设置为NULL。这样我们该怎样通过语句设置呢&#xff1f;&#xff1f; 例如有一个表&#xff0c;其中的一个属性为WM CHAR…

第三章 汇编语言和汇编软件

本章的实验的主要任务是安装NASM这个软件&#xff0c;在安装的时候有一个重要的一点就是软件版本要严格按照书中的要求&#xff0c;虽然作者说过可以下载更新的版本&#xff0c;但是实践表明会出现各种莫名的错误&#xff0c;书中的所有软件都可以在网上很容易找到☺&#xff0…

第四章 虚拟机的安装和使用

本章的主要是用virtualBox创建一个虚拟机&#xff0c;创建的过程基本上和书上的一样&#xff0c;有个别不一样的地方也不难&#xff0c;百度一下就知道了。 最后测试自己的虚拟VHD硬盘是否安装成功的方法&#xff1a; 1&#xff0c;用fixvhdwr.exe打开自己创建的虚拟硬盘Kong…

数据结构的介绍

数据结构逻辑结构集合线性结构树形结构图形结构数据的储存结构顺序储存结构链式储存结构索引储存结构散列储存结构数据的操作数据结构分为 逻辑&#xff0c;储存&#xff0c;数据的操作。逻辑结构 是指数据间存在的逻辑关系&#xff0c;与数据的储存无关。 两个要素组成&#…

第五章 编写主引导扇区代码

本章的思路是&#xff0c;在本机上上写一段代码&#xff08;这些代码的意义是往显存中写一些数据&#xff09;--》编译成bin文件--》写入到vhd硬盘的引导扇区&#xff08;即第一扇区&#xff0c;见第四章详述&#xff09;--》开机从硬盘启动&#xff0c;从而执行了自己写的这段…

第六章 相同的功能,不同的代码

本章的代码和上一章实现的是同样的功能&#xff0c;但是本章采用更合理的技巧去组织代码&#xff0c;使代码更通用、易懂。具体代码贴在下面&#xff0c; ;代码清单6-1;文件名&#xff1a;c06_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码;创建日期&#xff1a;2011-4-12 2…

几种比较好看的滚动条样式及代码

7.代码&#xff1a; <div style"BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; OVERFLOW: auto; BORDER-LEFT: 1px solid; WIDTH: 300px; DIRECTION: rtl; BORDER-BOTTOM: 1px solid; HEIGHT: 100px;"> <p alignleft>文字</p></DIV> 6.代…

线性表----链表

链表分为单链表&#xff0c;循环链表&#xff0c;双向链表。 1&#xff0c;链表 采用链式方式储存的线性表称为链表&#xff0c;链表是用若干地址分散的存储单元存储数据元素。必须采用附加信息表示数据元素之间的逻辑关系&#xff08;逻辑上相邻结点地址-指针域&#xff09;。…

第七章 比高斯更快的计算

下面这段代码的功能是在显存0xb800:0 写入“123...1005050”这个字符串&#xff0c;没有什么难度。 ;代码清单7-1;文件名&#xff1a;c07_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码;创建日期&#xff1a;2011-4-13 18:02jmp near startmessage db 123...100start:mov ax…