正如标题所说的那样,到底是那些.NET的知识点呢?

    接下来就让我带着你们去了解这些知识点吧!

1.接口

2.索引器

3.FOREACH的本质

4.匿名内部类

5.运算符的重载

一.什么是接口?接口的作用又是什么呢?如果不是太清楚或者是其他什么的,那就请在认真、完整的浏览几遍吧!我想对你以后应该有很大的帮助。

解析:接口是组件之间的协议,描述了组件对外提供的服务。从技术上讲接口是一组包含了函数型方法的数据结构。通过这组数据结构,客户代码可以调用组件对象的功能。接口可以从父接口中继承。接口的继承首先是说明性继承,不是实现性继承,它的实现需要通过类或结构来实现;其次接口继承可以是多继承。

 作用:

01.接口就是为了约束方法的格式(参数和返回值类型)而存在的

02.接口可以实现多继承,弥补单继承的缺陷。

   03.接口可以看成是一个特殊的抽象类,通过反编译看源码可知

04.接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体

05.如果一个类实现了某个接口,就得实现该接口中所有的方法

06.接口要谨慎使用,防止出现接口污染!

07.接口仅仅代表一种能力,实现该接口的类和接口没有继承关系

08.接口是用来实现的,类是用来继承的。

09.其实很多时候,看似可以不用接口,因为接口就是一个方法的约定,

表明你这个类必须要有某些方法,但是不写接口也可以有这些方法,用了接口,

就可以使用接口变量,统一调用,实现多态

 1.创建接口并让一个类去实现这个接口

  

 public class Person:IFly
{
public string Say(string name)
{
return "人";
}
} public class Plane:IFly
{
public string Say(string name)
{
Console.WriteLine("大飞机在天上飞啊");
return "飞翔着";
}
}

 2.定义一个一接口IFly类型的数组实例化各个实现IFly接口的类

 IFly[] ifly =
{
new Plane(),
new Person()
};
foreach (IFly item in ifly)
{
string name = item.Say("会飞的所有东西");
Console.WriteLine(name);
}

3.接口也可以继承接口

 public interface IPlay:IFly
{
void Play();
}

 二.接下来再说说让我们编码更方便的索引器吧!

      1.属性的本质是方法,索引器的本质是属性。(可能会更好了解索引器)

2.索引器

         01.C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。

02.定义索引器的方式与定义属性有些类似,其一般形式如下:

[修饰符] 数据类型 this[索引类型 index]

{

get{//获得属性的代码}

set{ //设置属性的代码}

}

03.索引器的本质还可说是类(看源码)

04.创建索引器代码

public class Student
{
private string[] name = new string[];
public string this[int index]
{
get { return name[index];}
set { name[index]=value;}
}
} static void Main(string[] args)
{ #region 02.索引器 Student stu = new Student();
stu[] = "董泽文";
stu[] = "张一铭";
Console.WriteLine(stu[] + "\n" + stu[]); #region

三.你们都应该会特别感兴趣的Foreach原理:

本质:实现了一个IEnumerable接口,

01.为什么数组和集合可以使用foreach遍历?

解析:因为数组和集合都实现了IEnumerable接口,该接口中只有一个方法,GetEnumerator()

02.数组是一种数据结构,它包含若干相同类型的变量。数组是使用类型声明的:type[] arrayName;

03.数组类型是从抽象基类型 Array 派生的引用类型。由于此类型实现了 IEnumerable ,因此可以对 C# 中的所有数组使用 foreach 迭代。

04.面试题:

001.C#中能用foreach遍历访问的对象需要实现______接口或声明______方法的类型。

解析:IEnumerable ,GetEnumerator()

 05.实现IEnumerable接口的类MyConnection

 public class MyConnection:IEnumerable
{
ArrayList list = new ArrayList();
public void AddList(object o)
{
list.Add(o);
}
public IEnumerator GetEnumerator()
{
return new MyIenumerator(list);
}
}

  06.实现IEnumerator接口的类MyIEnumerator

  public class MyIenumerator:IEnumerator
{
public ArrayList list = new ArrayList();
private int i = -;
public MyIenumerator(ArrayList mylist)
{
list = mylist;
}
public object Current
{
get { return list[i]; }
}
public bool MoveNext()
{
bool flag = false;
if (i<list.Count-)
{
i++;
flag = true;
}
return flag;
} public void Reset()
{
throw new NotImplementedException();
}
}

07.实例化MyIEnumertor  即可用FOREACH来循环

MyConnection mycon = new MyConnection();
mycon.AddList("董泽文");
mycon.AddList("张一铭");
foreach (object item in mycon)
{
Console.WriteLine(item);
}

 四.匿名内部类

02.匿名类在底层还会被CLR编译成一个有名字的类

03.匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断。

可通过使用 new 运算符和对象初始值创建匿名类型

 #region 04.匿名内部类
var num = ;
var names= "";
var falg= false;
var stu =new {name="董泽文",age= };
if (num==&&names.Equals(""))
{
num++;
names += "";
falg = true;
}
Console.WriteLine(num + "\t" + names + "\t" + falg);
Console.WriteLine(stu.name + "\t" + stu.age);
#endregion

 五.运算符重载

01.C# 允许用户定义的类型通过使用 operator 关键字定义静态成员函数来重载运算符。

   02.重写运算符方法的类

public class Personers
{
public string PName { get; set; }
public int PAge { get; set; }
//重写了加法运算
public static int operator +(Personers p1,Personers p2)
{
return p1.PAge + p2.PAge;
}
//重写了减法运算
public static int operator -(Personers p1, Personers p2)
{
return p1.PAge - p2.PAge;
}
//重写了乘法运算
public static int operator *(Personers p1, Personers p2)
{
return p1.PAge * p2.PAge;
}
//重写了除法运算
public static double operator /(Personers p1, Personers p2)
{
return p1.PAge / p2.PAge;
}
//重写了恒等运算(必须与不等方法同时书写)
public static bool operator ==(Personers p1, Personers p2)
{
return p1.PAge == p2.PAge;
}
//重写了不等运算(必须与恒等方法同时书写)
 public static bool operator !=(Personers p1, Personers p2) { return p1.PAge != p2.PAge; } }

03.实例化

 Personers p1 = new Personers();
Personers p2 = new Personers();
p1.PAge = ;
p2.PAge = ;
Console.WriteLine(p1 + p2);
Console.WriteLine(p1 - p2);
Console.WriteLine(p1 * p2);
Console.WriteLine(p1 / p2);
Console.WriteLine(p1 == p2);

  

    目前学习的内容就到这了,如果觉得对你有帮助的话,就请等待我的更新吧!如果有什么知识点还不足的,请多多的提点建议!

回忆那些我们曾今铭记过的.NET重点知识的更多相关文章

  1. 《如何在大学里脱颖而出(How to Win at College)》读书笔记

    <如何在大学里脱颖而出(How to Win at College)>读书笔记 图书简介 中文版: 英文版: 作者卡尔·纽波特(Cal Newport)于 2004 年6月以优等生荣誉学会 ...

  2. Deep Learning 1_深度学习UFLDL教程:Sparse Autoencoder练习(斯坦福大学深度学习教程)

    1前言 本人写技术博客的目的,其实是感觉好多东西,很长一段时间不动就会忘记了,为了加深学习记忆以及方便以后可能忘记后能很快回忆起自己曾经学过的东西. 首先,在网上找了一些资料,看见介绍说UFLDL很不 ...

  3. C Primer Plus(第五版)5

    第5章 运算符,表达式和语句 5.1 循环简单 程序清单 5.1 显示了一个示例程序,该程序做了一点算术运算来计算穿 9 码鞋的脚用英寸表示的长度.为了增加你对循环的理解,程序的第一版演示了不使用循环 ...

  4. 关于ACM,关于CSU

    原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...

  5. 实例讲解启动mysql server失败的解决方法

    MySQL 实例讲解启动mysql server失败的解决方法 来源: 作者: 发表于: 启动mysql server 失败,查看/var/log/mysqld.err 080329 16:01:29 ...

  6. 【黑金原创教程】【TimeQuest】【第四章】内部延迟与其他

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  7. 利物浦VS热刺,我努力不去想,但利物浦真的在争冠

      用这张图作为开头吧,早餐的时候打开网易,苏神破门红军4-0登榜首的新闻,习惯性的点进去看看KOP的评论,有一句回复『利物浦该夺冠了,多少年了.喜欢利物浦比喜欢老婆还早,老婆都成黄脸婆了.现在带着女 ...

  8. 第一次做的jsp分页,详细代码。。。。

    自己学jsp也有了一段时间,而且自己现在上的课是java web现在雪儿基础做了一个最简单的jsp页面,代码都放在一个页面,自己准备在改进,一步步来,这里的代码可能不是很完美,没事,下面接下来会有大概 ...

  9. XTU | 人工智能入门复习总结

    写在前面 本文严禁转载,只限于学习交流. 课件分享在这里了. 还有人工智能标准化白皮书(2018版)也一并分享了. 绪论 人工智能的定义与发展 定义 一般解释:人工智能就是用 人工的方法在 **机器( ...

随机推荐

  1. VC 鼠标滚轮事件控制绘图的问题

    问题描述: 在MFC中绘制数据曲线,通过鼠标滚轮来进行放大缩小操作.在使用滚轮事件时,发现如果数据量较大,会出现卡顿. 解决方案: 鼠标滚轮事件会进行重复绘图,考虑在鼠标滚轮结束之后再重绘: 在鼠标滚 ...

  2. idea Error:java: Compilation failed: internal java compiler error

    idea 遇到Error:java: Compilation failed: internal java compiler error 是提示说你当前使用的编译器jdk版本不对. 按住Ctrl+Alt ...

  3. LINQ

    lambda表达式: LINQ to Object: 参考:http://www.cnblogs.com/leon-y-liu/articles/3575009.html LINQ to XML: u ...

  4. PHP反射API

    近期忙着写项目,没有学习什么特别新的东西,所以好长时间没有更新博客.我们的项目用的是lumen,是基于laravel的一个轻量级框架,我看到里面用到了一些反射API机制来帮助动态加载需要的类.判断方法 ...

  5. QT编译时 cc1plus进程占用大量内存卡死问题解决

    QT5.7 做一个demo编译时,内存几乎完全消耗,卡死.经尝试发现是添加资源文件过大导致(不知是单个文件过大触发还是文件总共过大触发)的.我的资源文件工136M,单个最大是125M左右. 解决方法是 ...

  6. Datazen地图Chart介绍

    本篇主要介绍Datazen对于地图图表的支持,这里你可以看到Datazen目前所支持的地图图表类型,以及其自带的地图数据. Datazen下地图图表跟其它Dashboard的类型是一样的. 创建一个新 ...

  7. Redis 慢速入门(一)

    网上关于redis的入门文章其实已经很多了,这里仅仅以作者特独的视角来学习下redis相关的基础概念. 一切的基础 需要分清楚3个重要的概念,key,type,value. 这里的key为hello, ...

  8. 了解 xcodebuild 命令 ,自动打包ipa

    引用博客:http://blog.nswebfrog.com/2015/10/31/xcodebuild/ 在 iOS 开发中,如果需要把工程打包成 ipa 文件,通常的做法就是在 Xcode 里点击 ...

  9. trigger() --工作中问题nav样式

    自动执行某元素的某个事件 $("#div").trigger("click");  //让系统自动执行单击事件 适用于nav样式中,下面横线绝对定位于nav.o ...

  10. SQL Server中的Merge关键字

    本文转载地址:http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html 简介 Merge关键字是一个神奇的DML关键字.它在SQL ...