【阶段试题分析】阶段一试题总结

String类型对象比较

注意是值的比较还是引用地址的比较

“==”比较两个对象是否为同一个对象

Equals则是对其对象的值进行比较

String s1 = "123";
String s2 = "123";
Console.WriteLine(s1 == s2);
Console.WriteLine(s1.Equals(s2));
 
char[] ch = new char[3] { '1', '2', '3' };
String s3 = new String(ch);
object obj1 = s1; //获取地址
object obj3 = s3;
 
Console.WriteLine(obj1 == obj3);  //结果是True
Console.WriteLine(obj1.Equals(obj1));  //结果是False

===================昏割线,以下内容转自于博客园====================

Person p1 = new Person("aa", 12);
 
Person p2 = new Person("aa", 12);
 
Console.WriteLine("Equals和= =(等于号)的比较");
 
Console.WriteLine("p1==p2  " + (p1 == p2));//fals
 
Console.WriteLine("p1.Equals(p2)  " + p1.Equals(p2));

对于 p1==p2 比较的结果是false,这点是毫无疑问的,因为他俩是两个不同的变量,所以引用的地址也是不同的。但是对于p1.Equals(p2) 返回false,可能有人会产生疑问,p1 和p2的内

容是相同的啊,为什么他俩的比较结果却是为false呢?。原因就在于在Equals是Object中的一个虚方法,而person类中没有对她进行重写,因此此时调用的仍是父类中的Equals方法。但是父

类是无法知道你都有哪些成员字段的,因此返回的是false。要想让他能够比较两个变量的内容是否相同,那就应该重写Equals方法。

来自:http://www.cnblogs.com/chen0720/p/3209398.html  

关于string讲解: Equals() 和 运算符 == 重载准则

===================昏割线==========================

继承中override和new问题

先贴上阶段一的考试题:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace NO8
{
    public class Animal
    {
        protected int i;
        public Animal()
        {
            Add(1);
        }
        public int GetI()
        {
            return i;
        }
        public virtual void Add(int v)
        {
            i += v;
        }
    }
 
    public class Dog : Animal
    {
        public Dog()
        {
            Add(2);
        }
        public override void Add(int v)
        {
            i += v * 2;
        }
    }
 
    public class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.Add(5);
            Console.WriteLine(dog.GetI());
            Console.Read();
        }
    }
}

问题:运行结果是多少?答案:16
考点:涉及到override的使用,以及实例化子类对象时需要调用父类的构造函数

当父类的中的virtual方法被子类重写了,那么当实例化子类对象时需要调用父类的构造函数,其中构造函数中Add方法则是子类中重写过的;
当virtual方法没有被重写时,子类中的方法Add被new修饰时,父类中构造方法调用的则是本类中的virtual修饰的Add方法。

异常捕获的顺序

从子类到基类的顺序

对于List集合作为参数使用 

List<object>与List<food>不是同一回事

关于反射

反射一个类的对象时不执行这个类的构造函数;不可访问该类中的私有字段(如何获取私有字段?)

posted @ 2013-08-18 16:25  CN.QS  阅读(180)  评论(0编辑  收藏  举报