C#初学笔记

1.枚举类型循环输出:

enum WeekDay
    {
       Sun=1,
       Mon=2,
       Tue=3,
       Wed=4,
       Thi=5,
       Fri=6,
       Sat=7
    }
foreach (WeekDay c in (WeekDay [])Enum.GetValues(typeof(WeekDay )))

{
Console.Write(String.Format("{0}是一周第{1}天",c.ToString(),(int)c));
}

也可以用for循环输出。获取枚举类型的值进行输出。

用for循环输出时需要获取枚举类型中数据对应的值(前提是值是连续的)

enum WeekDay
    {
       Sun=1,
       Mon=2,
       Tue=3,
       Wed=4,
       Thi=5,
       Fri=6,
       Sat=7
}
for (int i = (int)position.sun; i <=(int)position.sat; i++) {
      Daysarray[i] = Enum.GetName(typeof(WeekDay), i);
                Console.Write(Daysarray[i]+" ");
            }

2.继承心得

2.1C#中virtual,override,new辨析。

C#中虚拟方法可以被重写,而默认为虚拟方法则需要virtual来允许方法可以被重写。

override作为方法的标识符时提供派生方法对基类方法的新实现,同时override不可用于重写非虚方法和静态方法。加上override这个关键字的属性或函数将完全覆盖同名虚属性或虚函数,使父类的虚属性和虚函数在继承链中不可见,简单点说就是父类方法被子类覆盖,父类方法就不能被调用。

new是作为关键字表示隐藏,指加上new关键字的属性或者函数会对本类和本类的继承类隐藏本类的父类的同名属性或者函数。可以隐藏基类的虚方法和普通方法。简单说子类隐藏了父类的相同方法,通过强制类型转换外面还可以调用父类的实现。

下面是从网上看到的一个例子:

public class A {
    public virtual void Print() {
        Console.Write("A");
    }
}

public class B : A {
    public override void Print() {
        Console.Write("B");
    }
}

public class C : B {
    public new void Print() {
        Console.Write("C");
    }
}

public class D : C {
    public new void Print() {
        Console.Write("D");
    }
}

// A <- B <- C <- D

A a; a= new D();
a.Print();      

最后执行结果是B。

首先来看A a;表示定义一个a这个A类的对象.这个A就是a的申明类。a = new D(); 表示 实例化a对象,D是d的实例类 。

a.Print();    执行a.Print():1.先检查申明类A 2.检查到是虚拟方法 3.转去检查实例类D,D隐藏了C方法,C 隐藏了B方法,B重写了A中的方法4.执行实例类B中的方法 5.输出结果  B

总结:遇到一个virtual 方法时,它会调用派生得最远的实现并重写virtual成员的实现。比如将c类中print()方法标识符改成override则执行结果是c。

延伸一下:virtual和abstract的区别。参考出处http://www.cnblogs.com/xingbinggong/archive/2011/07/05/2098454.html

如果两个标识符用来修饰方法,前面必须添加public,要不然就会出错:虚拟方法或抽象方法是不能私有的。毕竟加上virtual或abstract就是让子类重新定义的,私有后无法被访问。

但是它们的区别很大。(virtual是“虚拟的”,abstract是“抽象的").

(1)virtual修饰的方法必须有实现(一对大括号也算实现),而abstract修饰的方法一定不能实现。

(2)virtual可以被子类重写,而abstract必须被子类重写。virtual只是起到赋予被重写功能的标识。

(3)如果类成员被abstract修饰,则该类前必须添加abstract,因为只有抽象类才可以有抽象方法。

(4)无法创建abstract类的实例,只能被继承无法实例化,抽象类或接口不能创建实例。

(5)C#中如果要在子类中重写方法,必须在父类方法前加virtual,在子类方法前添加override,这样就避免了子类中不小心重写了父类方法。

(6)abstract方法必须重写,virtual方法必须有实现(即便它是在abstract类中定义的方法).

3.数学函数

列出了几个数学函数帮助记忆

Math.Abs取绝对值

Math.Acos余弦函数

Math.Asin正弦函数

Math.Pow(a,b)指定次数幂。

Math.Round四舍五入

时间: 2024-10-28 04:11:43

C#初学笔记的相关文章

初学笔记(C#事件)

1.声明事件      EventHandler是一个预定义的委托,它定义了一个无返回值的方法.在 .Net Fromwork中,他的格式: public  delegate  void EventHandler (Object  sender, EvenArgs  e) 其中sender的类型为Object,表示时间发布者本身,e用来传递事件的相关信息,数据类型为EvenArgs及其派生类. 标准的EvenArgs并不包含任何事件数据, 因此EventHandler专用于表示不生成数据的事件的

lisp初学笔记

学习任何知识,都不能仅仅把它们当做知识,更重要的是要把它们在实际编程实践中应用起来,持有这样的学习观念才不至于让你变成学究式的活字典,对于程序员来说这一点尤其重要,你学习的任何语言知识,一定要在实际的程序编写过程中不断练习.不停实践,纸上得来终觉浅,绝知此事须躬行. LispBox 实际上是把 Emacs.Slime.Clozure CL 以及 QuickLisp 集成到一起,使用 LispBox 做开发环境就相当于选择了 Emacs 作为编辑器.选择 Slime 作为交互界面,那么一定要熟悉

flex入门--初学笔记1

环境:flashBuilder + eclipse 4.2 基本控件: 1 <mx:Script> 2 <![CDATA[ 3 import mx.controls.Alert; 4 public function showMsg(msg:String):void{ 5 mx.controls.Alert.show(msg); 6 } 7 ]]> 8 </mx:Script> 9 <mx:Panel title="常用控件" width=&qu

AS3 初学笔记 actionscript-之变量

变量 变量可用来存储程序中使用的值.要声明变量,必须将 var 语句和变量名结合使用.在 ActionScript 2.0 中,只有当您使用类 型注释时,才需要使用 var 语句.在 ActionScript 3.0 中,总是需要使用 var 语句.例如,下面的 ActionScript 行声明一个名 为 i 的变量: var i; 如果在声明变量时省略了 var 语句,则在严格模式下会出现编译器错误,在标准模式下会出现运行时错误.例如,如果以前未 定义变量 i,则下面的代码行将产生错误: i;

js&#39;初学笔记

之前看过一个博主说的学习前端养成写博客的习惯,我慢慢学着在上面写点东西,记录我的学习. 这段时间把之前学的js基础补上一点,学了一些对数组和字符的操作,split(),将字符串变成数组.join(),数组变为字符串.conca()连接数组. charAt(),charCodeAt(),formCharCode(),slice(start,end),substring(),substr(start,length);indexOf(); 有一些我就不多说了,在这里记下来,以后看看,有兴趣可以看看山冈

网站初学笔记3-HTML实用元素

HTML中链接邮件地址: <!DOCTYPE html><html><body> <address>Written by <a href="mailto:[email protected]">Donald Duck</a>.<br> Visit us at:<br>Example.com<br>Box 564, Disneyland<br>USA</addres

TensorFlow官方文档MNIST初学笔记[二]

TensorFlow官方文档MNIST初学笔记[二] MNIST是一个简单的计算机视觉数据集, 它还包括每个图像的标签, 每个图像是28像素乘以28像素, 我们可以把这个数组变成一个28×28 = 784个数字的向量.MNIST只是一个784维向量空间中的一个点.mnist.train.images具有形状的张量(n维阵列)[55000, 784] 第一维度是图像列表中的索引,第二维度是每个图像中每个像素的索引.对于特定图像中的特定像素,张量中的每个条目是0和1之间的像素强度. MNIST中的每

网站初学笔记3-HTML实用元素2

HTML 链接 - name 属性 name 属性规定锚(anchor)的名称.您可以使用 name 属性创建 HTML 页面中的书签.书签不会以任何特殊方式显示,它对读者是不可见的.当使用命名锚(named anchors)时,我们可以创建直接跳至该命名锚(比如页面中某个小节)的链接,这样使用者就无需不停地滚动页面来寻找他们需要的信息了. 首先,我们在 HTML 文档中对锚进行命名(创建一个书签):<a name="tips">基本的注意事项 - 有用的提示</a&

网站初学笔记1

什么是 WWW?WWW 指万维网(World Wide Web)万维网常被称为WebWeb 是由遍布全球的计算机所组成的网络所有 Web 中的计算机都可以彼此通信所有这些计算机都使用名为 HTTP 的通信标准 WWW 如何工作?Web 信息存储于被称为网页的文档中网页是存储于被称为 Web 服务器的计算机上读取网页的计算机称为 Web 客户端Web 客户端通过称为浏览器的程序来查看网页主要的浏览器有 Internet Explorer 和 Mozilla Firefox 浏览器如何读取页面?浏览

网站初学笔记3-HTML实用元素4

<!DOCTYPE> 声明Web 世界中存在许多不同的文档.只有了解文档的类型,浏览器才能正确地显示文档.HTML 也有多个不同的版本,只有完全明白页面中使用的确切 HTML 版本,浏览器才能完全正确地显示出 HTML 页面.这就是 <!DOCTYPE> 的用处.<!DOCTYPE> 不是 HTML 标签.它为浏览器提供一项信息(声明),即 HTML 是用什么版本编写的. HTML 中的预留字符必须被替换为字符实体. HTML 实体在 HTML 中,某些字符是预留的.在