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

C#基础 基本语法4相关推荐

  1. mysql怎样查表的模式_mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】...

    1.mysql简单的查询:select 字段1,字段2... from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都是 ...

  2. 基础SQL语法及使用(入门级)

    基础SQL语法 基础 1.建表(CREATE\TABLE...) 2.删除表(DORP\TABLE) 3.修改表插入列(ALTER\TABLE\ADD\DROP\COLUMN\CHANGE) 4.插入 ...

  3. 整理总结:零基础英语语法

    参考资料:<零基础英语语法> 文章目录 参考资料:<零基础英语语法> 一.词法篇 1.实词 1.名词 I. 根据意义分为专有名词和普通名词 1. 专有名词 2.普通名词 3.名 ...

  4. 大数据必学Java知识(一):Java基础入门语法和安装

    Java基础入门语法和安装 1. Java概述 1.1 Java语言背景介绍(了解) 1.2 Java语言跨平台原理(理解) 1.3 JRE和JDK(记忆) 1.4 JDK的下载和安装(应用) 2. ...

  5. 【ES知识】ES基础查询语法一览

    大家好,我是老坛. 更多优质文章资源请关注同名公众号:老坛聊开发 Elasticsearch是一个分布式的RESTful 风格的搜索和数据分析引擎,它使用方便,查询速度快,因此也被越来越多的开发人员使 ...

  6. JS基础核心语法(1)

    JS基础核心语法 JS的简介 JS的组成 JS的特点 JS的使用 JS的输出 JS的调试 JS的语法规范 报错类型 标识符 JS的执行代码过程: 有无var关键字声明变量的区别 JS的简介 视图(vi ...

  7. 狂神Java面试题总结:基础及语法169道

    狂神Java面试题总结:基础及语法169道 收集整理:秦疆 联系方式QQ:24736743 微信:qinlvejiang 答案来源收集与互联网,部分内容经供参考,代码全部为手写验证通过. 1~20 1 ...

  8. 2022Java基础、语法最全面试题,为秋招做好准备

    Java基础.语法: 1.Java跨平台原理(字节码文件.虚拟机) C/C++语言都直接编译成针对特定平台机器码.如果要跨平台,需要使用相应的编译器重新编译. Java源程序(.java)要先编译成与 ...

  9. C#语言基础-LINQ语法

    C#语言基础-LINQ语法 写这两篇文章的目的是为了备忘. C#语言在大学读书时候学过.当时做过一些东西.但是由于从事的主要工作和C#无关便忘记了. 近来公司增加了Unity业务. 写Unity主要是 ...

  10. ANTLR4(四) 基础设计语法

    ANTLR4基础设计语法 写在之前 语言模式 序列 选择 词法符号依赖 嵌套 处理优先级.结合性.左递归 优先级 结合性 左递归 核心语法标记总结 词法结构 匹配标识符 匹配数字 匹配字符串常量 匹配 ...

最新文章

  1. Python Scrapy 验证码登录处理
  2. ITK:建立一个Hello World程序
  3. 【渝粤题库】陕西师范大学152210 现代社会调查理论与方法
  4. 转载]SA权限九种上传方法
  5. mysql 备库,【MySQL】数据库备库策略与脚本
  6. 微课|中学生可以这样学Python(例9.1):Excel导入SQLite(1)
  7. STM32线缆综合测试系统
  8. Java中 java.io.IOException: Broken pipe
  9. IEC61850的Read请求报文件MMS PDU解码
  10. cadence ~ PCB排版 必要流程
  11. python魔兽挂机_魔兽怀旧服玩家有多难?为了不用重新排队,自制绝不封号的外挂!...
  12. 操作手册与用户手册的区别
  13. Shell命令提示符
  14. 金蝶设置盘盈盘亏单据权限
  15. linux下tomcat的访问权限,关于Linux权限引起的Tomcat项目404问题
  16. 32位指针强制转换成64位数据
  17. 微信小程序 15 个人中心页
  18. 2019网易游戏测试开发实习电话面试总结
  19. IBM3650M4实体机安装ESXI7.0
  20. 自古深情留不住,总是套路得人心!带你吊打面试官...

热门文章

  1. 前端学习(3133):react-hello-react之高阶函数
  2. [css] 请问display:inline-block在什么时候会显示间隙?
  3. 工作329:uni-数据为空不显示
  4. 前端学习(1937)vue之电商管理系统电商系统之渲染分配角色的对话框并请求数据
  5. 前端学习(1760):前端调试值之如何让浏览器阻止请求相关资源
  6. 前端学习(1697):前端系列javascript之原型
  7. 前端学习(778):随机数方法
  8. 前端学习(221):字体属性
  9. 第十七期:详解大数据处理中的Lambda架构和Kappa架构
  10. java学习(92):线程的创建方法一