[基础知识]Virtual & Abstract

Virtual

虚函数是多态的前提和保证

被标注为virtual的函数可以被继承类重写(override),并且可以在运行时动态调用相应的方法(多态)。

没有标注为virtual的非虚方法,在继承类中虽然不能通过override重写方法,但是也可以声明一个同名方法的,不过不具备多态的性质!

public class SuperClass
{
    public void Display()//not virtual
    {
        Console.WriteLine("I'm super");
    }

    public virtual void Vdisplay()
    {
        Console.WriteLine("I'm superVVV!!!");
    }
}

public class LowerClass : SuperClass
{
    public void Display()//new public void Display();和父类中的方法同名,却不具备多态的性质
    {
        Console.WriteLine("i'm lower");
    }
    public override void Vdisplay()//重写了父类中的方法
    {
        Console.WriteLine("I'm lowerVVV");
    }
}

Abstract

abstract抽象方法则更像是一个接口(Interface)方法

被标注为abstract的方法不能有具体的实现!

而且如果有方法被标注为abstract, 则这个类需要被标注为abstract

详情
具体关于virtual 和 abstract的区别可以参看:http://www.cnblogs.com/MayGarden/archive/2010/04/04/1704279.html

[读书笔记]《一万小时天才理论》

《一万小时天才理论》封面

花了几天的闲杂时间看完了这本书,书名略有哗众取宠之嫌,不然便是作者对于天才的理解有别于我日常的理解。如果将“天才”改为“大师级工匠”我觉得更为贴切。该书的中心思想便是[练习 纠正]+ [能人巧匠],即无数次的练习+纠正,最后使你成为能人巧匠。

以下为读书摘要:

1.精深练习的三点注意事项:

I.放慢练习

慢速练习可以使练习者更加关注错误,每次练习都提高了精确度;更有助于塑造技能的形状和节奏。

这点我在练琴时颇有体会,在弹奏复杂的小节或者是含有一些指法技巧的小节时,快速弹奏发出几个模糊沉闷的音可以蒙混过关,但是对于这个小节的弹奏能力却不太容易进步。坚持快速通关造成的恶果就是每次这个小节都只能滥竽充数蒙混过关。

阅读全文 »

[C#]问题及解决方案汇总

该笔记最没技术含量,但是却非常实用。

1.未能找到类型或命名空间名称

有些时候,你明明已经添加了某个引用到你的项目中,敲代码的时候也能弹地出来,但就是过不了编,仔细一看会发现一个小警告,警告大意如下:

未能解析引用的程序集“… , Version= … , Culture=… … ”,因为它对不在当前目标框架“.NETFramework,Version=v4.0,Profile=Client”中的“System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”具有依赖关系。请删除对不在目标框架中的程序集的引用,或考虑重新确定项目的目标。

**.解决方法:**

工程属性 -> 应用程序 ->目标框架,把.NetFramework 4.0 Client Profile修改为NetFramework 4.0 即可

阅读全文 »

[C#]有关WebBrowser

WebBrowser窗口自动滚动

this.webBrowser.Document.Window.ScrollTo(0, webBrowser1.Document.Body.ScrollRectangle.Height);

阅读全文 »

[Python]switch,case和深浅拷贝

switch & case

Python没有switch…case的语法,不过可以用Dictionary的特性来写出同样功能的代码,甚至还可以写出更猛的代码

等价的Python代码:

def f1():
    print 'f1'

def f2():
    print 'f2'

switcher = 
{
  1: f1,
  2: f2,
}

#调用时
switcher[1]() # 将输出 f1
switcher[2]() # 将输出 f2
阅读全文 »

[Python]列表排序 & 字典排序

List Sort

1
2
3
l = [3,1,2]
sorted(l)
sorted(l, reverse=True)
阅读全文 »

[读书笔记]策略模式

_《HeadFirst设计模式》读书笔记系列_

看起来美好的面向对象

学过面向对象的都知道继承可以重用父类中的一些方法,从而减少很多劳动量:

现有场景如下:

玩具工厂生产各种鸭子,有优雅鸭子(ElegantDuck),爵士鸭子(DukeDuck),霸王鸭子(KingDuck),均继承自超类鸭子(Duck),他们都是可以飞行的,并且在飞行时执行统一的方法 Fly() —— 喊叫”I’m flying.” 于是优雅、爵士和霸王顺理成章地继承了超类的飞行方法。

阅读全文 »

单件模式(Singleton Pattern)

这是设计模式中最简单的一种模式

有的时候,你可能会希望有这样一个类,它只能允许最多有一个实例存在于这个世界上,这个实例,是独一无二的存在。

这个时候,单件模式(singleton pattern)便应运而生

阅读全文 »