设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: pengjia89
打印 上一主题 下一主题

【读书】图解教程-西西

[复制链接]

点击这里给我发消息

11#
 楼主| 发表于 2014-4-3 19:47:37 | 只看该作者
  
C#图解教程读书笔记(第7章 类和继承)

  

1、所有的类都继承自object2、如何隐藏基类的成员
要隐藏一个继承的数据成员,需要声明一个新的相同类型的成员,并使用相同的名称。
通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承的函数成员。请记住,签名由名称和参数列表组成,但不包括返回类型。
要让编译器知道你在故意隐藏继承的成员,使用new修饰符,没有它,程序可以成功编译,但编译器会警告你隐藏了一个继承成员。
也可以隐藏静态成员。
   class SomeBase
   {
        public string cFiled;
   }
   class SomeClass: SomeBase
   {
        new public string cFiled;
   }
3、基类访问使用base.的形式。4、虚方法和覆写方法
基类的方法使用virtual,派生类的方法使用override,这样,就可以在派生类中,改变基类的方法。
覆写的方法和被覆写的方法必须有相贩可访问性,换一种说法,被覆写的方法不能是private,而覆写的方法是public。
不能覆写static或非虚方法。
方法、属性和索引,以及称为事件的另一种类型,它们都可以被声明为virtual和override。
用override和new覆写函数
class Program
   {
        static void Main(string[]args)
        {
            MyBaseClasscBase = new MyBaseClass();
            cBase.Print();
            MyDerivedClasscDevrived = new MyDerivedClass();
            cDevrived.Print();  
            SecondDerivedcSecond = new SecondDerived();
            cSecond.Print();
            MyBaseClasscBase2 = (MyBaseClass)cSecond;
            cBase2.Print();
            cBase2.Print2();
            Console.ReadKey();
        }
   }
   class MyBaseClass
   {
        virtualpublic voidPrint()
        {
            Console.WriteLine("This is the base class");
        }
        virtualpublic voidPrint2()
        {
            Console.WriteLine("This is the base class");
        }
   }
   class MyDerivedClass: MyBaseClass
   {
        public override void Print()
        {
            Console.WriteLine("This is the derived class");
        }
        overridepublic voidPrint2()
        {
            Console.WriteLine("This is the derived class");
        }
   }
   class SecondDerived: MyDerivedClass
   {
        public override void Print()
        {
            Console.WriteLine("This is the Second Derived Class");
        }
        new public void Print2()
        {
            Console.WriteLine("This is the Second Derived Class");
        }
   }
输出内容:
用override不仅可以覆写函数,还可以覆写属性。
5、构造函数的顺序
6、声明为public的程序,可以跨程序集继承。7、访问成员的区域
private只在类的内部可访问
internal对该程序集内所有类可访问
protected对所有继承该类的类可访问
protectedinternal 对所有继承该类或在该程序集内声明的类可访问
public对任何类可访问
8、抽象成员
用abstract修饰符标记,方法、属性、事件、索引均可以抽象。抽象成员没有实现体,被分号取代。而且必须被覆写。
①尽管抽象成员必须在派生类中用相应的成员覆写,但不能把virtual修饰符加到abstract修饰符。
②就像虚成员,派生类中抽象成员的实现必须指定override修饰符。
9、抽象类
抽象类只能用作其它类的基类不能实例化。用abstract声明。
任何派生自抽象类必须使用override关键字实在该类所有的抽象成员,除非派生类自己也是抽象类。
10、密封类
用sealed声明,必须是独立的类,不能用作基类。
11、静态类
静态类需要声明为static,所有成员必需是静态的,可以有静态构造函数,但没有实例构造函数,不能创建该类的实例。静态类是隐匿是密封的。
12、扩展方法
   class MyData
   {
        privatedouble dbD1;
        privatedouble dbD2;
        privatedouble dbD3;
        publicMyData(double d1, doubled2, double d3)
        {
            dbD1 = d1;
            dbD2 = d2;
            dbD3 = d3;
        }
        public double Sum()
        {
            returndbD1 + dbD2 + dbD3;
        }
   }
   static classExtendMyData
   {
        public static doubleAverage(this MyDatamd)
        {
            returnmd.Sum() / 3;
        }
   }
则可以直接用以下方法调用:
            MyDatamd = new MyData(3,4, 5);
            Console.WriteLine("Average:{0}", md.Average());
            Console.ReadKey();
this必需作为第一参数,如果需要给 Average加参数,参考如下:
       publicstatic doubleAverage(this MyDatamd,int icount)
        {
            returnmd.Sum() / icount;
        }
调用时:
            MyDatamd = new MyData(3,4, 5);
            Console.WriteLine("Average:{0}", md.Average(3));
            Console.ReadKey();

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

12#
 楼主| 发表于 2014-4-14 12:16:24 | 只看该作者
   
C#图解教程读书笔记(第8章 表达式和运算符)

  


表达式字面量整数字面量

                              
字符字面量

字符串字面量
求值顺序优先级

结合性

与C和C++不同,在C#中的数字不具有布尔意义。
各种运算符的作用(过)
用户定义类型转换
class XiXiInt
   {
       const intiMaxValue = 100;
       const intiMinValue = 0;
       private inttheValue = 0;
       public intTheValue
       {
            get{ return theValue; }
            set
            {
                if(value < iMinValue)
                {
                   theValue = iMinValue;
                }
                else
                {
                    theValue = value > iMaxValue ? iMaxValue : value;
                }            
            }
       }
       public staticimplicit operatorint(XiXiIntiXiXi)
       {
            returniXiXi.TheValue;
       }
       public staticimplicit operatorXiXiInt(intx)
       {
            XiXiIntiXiXi = new XiXiInt();
            iXiXi.TheValue = x;
            returniXiXi;
       }
   }
显式转换和强制转换运算符
如果将implicit改为explicit的话,则需要显式强制转换。
运算符重载
运算符重载只能用于类和结构。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

13#
 楼主| 发表于 2014-4-14 18:34:53 | 只看该作者
第9章
文件头的Using是Using指令,不是using语句
            using (TextWriter tw = File.CreateText("xixi.txt"))
            {
                tw.WriteLine("XiXi");
            }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-4 23:18 , Processed in 0.111753 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表