fengcarl

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.Member Definitions

public-成员可以由任何代码访问

private-成员只能由类内的代码访问 - Default

internal-成员只能由定义它的工程内部访问

protected-成员只能有类内,或者继承他的类访问

protected internal-成员只能有工程内部的类本身以及继承它的类访问

1) Defining Fileds

公有类型的字段变量 使用 PascalCasing 规则命名

readonly关键字-表明该字段只能由构造函数来赋值,或者由初始化赋值语句赋值

2) Defining Methods

***如果使用static来修饰该方法,那么此方法只能通过类名来访问,不能通过类的实例来访问***

virtual-该方法可被重写

abstract-该方法必须在一个非抽象子类中被重写,只能用于抽象类中

override-方法重写了一个基类方法,如果该方法被重写必须使用该关键字

extern-方法的定义被放在其他地方

3) Defining Properties

属性为特殊的字段,有get 和 set 其中set可以用来做一些赋值控制。

eg.

View Code
 1 namespace Ch10Ex02
 2 {
 3     public class Myclass
 4     {
 5         public readonly String Name;
 6         private int intVal;
 7         public int Val
 8         {
 9             get
10             {
11                 return intVal;
12             }
13             set
14             {
15                 if (value >= 0 && value <= 10)
16                     intVal = value;
17                 else
18                     throw (new ArgumentOutOfRangeException("Val", value, "Val must assigned a value between 0 and 10."));
19             }
20         }
21         public override string ToString()
22         {
23             return "Name:" + Name + "\nVal:" + Val;
24         }
25         private Myclass()
26             : this("Default Name")
27         {
28         }
29         public Myclass(string newName)
30         {
31             Name = newName;
32             intVal = 0;
33         }
34     }
35     class Program
36     {
37         static void Main(string[] args)
38         {
39             Console.WriteLine("Creating Object myObj...");
40             Myclass myObj = new Myclass("My Object");
41             Console.WriteLine("myObj Created");
42             for (int i = -1; i <= 0; i++)
43             {
44                 try
45                 {
46                     Console.WriteLine("\nAttempting to assign {0} to myObj.Val...", i);
47                     myObj.Val = i;
48                     Console.WriteLine("Value {0} assigned to myObj.Val.", myObj.Val);
49                 }
50                 catch (Exception e)
51                 {
52                     Console.WriteLine("Exception {0} thrown.", e.GetType().FullName);
53                     Console.WriteLine("Message:\n\"{0}\"", e.Message);
54                 }
55             }
56             Console.WriteLine("\nOutputting myObj.ToString()...");
57             Console.WriteLine(myObj.ToString());
58             Console.WriteLine("myObj.ToStrinig() Output.");
59             Console.ReadKey();
60         }
61     }
62 }

可以控制赋值只能在0到10之间,其他赋值情况就会抛出异常。

主要用于一些类内的成员变量,为了安全性,设为了私有,不允许外界访问,所以一般通过属性来访问。

2.Additional Class Member Topics

1)Hidding Base Class Methods

隐藏基类方法可以直接在子类中 重新定义方法。

例如:

public Class MyBaseClass

{

public void DoSomething()

{}

}

pulbic Class MyDerivedClass:MyBaseClass

{

public void  DoSomething()

{}

}

此方法就隐藏了基类中的方法。另外可以使用关键字new

new public void DoSomething(){} 可以达到同样的效果。不过不会出现警告!

***隐藏基类和重写的区别***

隐藏基类不会对基类产生影响,重写会产生影响。重写之后,当把子类复制给基类的时候就会基类中的方法被重写。

2)Calling Overriden or Hidden Base Class Methods

使用base关键字,在子类中使用 例如: base.DoSomething(); 那么子类中仍然保留了基类中的方法。

3)Nested Type Definition

嵌套类型的定义,即可以在类中再定义一个类,一般都把这个嵌套类定义为private类型。如果为public类型则可以实例化

eg. MyClass.MyNestedClass myObj = new Myclass.MyNestedClass();

3.Interface Implementation

分为显示引用和隐式引用两种,一般情况下用显式引用

3.Boxing and Unboxing

***System.Object equals to object***

装箱的含义: 

int i = 42;

object o = i;

此 程序中 将值类型42赋予了对象引用类型的o.值类型的值都存在栈中 而引用类型必须要引用堆中的值,所以此时就把42复制一个到堆中,从而object类型的引用也引用堆中的值,这样就不会造成错误。

而复制到堆中的值与原来在栈中的值没有关系,任意一个修改都不影响另外一个。

拆箱的含义:

将堆中的值拆箱 再存到栈中,需要用到强制类型转换,如果不符合会抛出InvalidCastException

例如

int i = 42;

object o = i;

i = (int)o;

***拆箱和装箱的开销较大,不能够滥用,后面会继续学到另外一种异曲同工的技术----泛型。

4.强制类型转换

is操作符

例如:

WrappedInt wi = new WrappedInt();

object o = wi;

if(o is WrappedInt)

{

WrappedInt temp = (WrappedInt)o;

}

as操作符

WrappedInt wi = new WrappedInt();

object o = wi;

WrappedInt temp = o as WrappedInt;

if(temp != null) //只有成功转换,转型是安全的,if下面的值才会执行。

posted on 2013-04-16 14:31  fengcarl  阅读(184)  评论(0编辑  收藏  举报