当前位置:首页 > C#教程 > C#高级

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四舍五入


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!