《C#高级编程》笔记系列第一弹-开篇

简介:

    虽然以前做过的C#项目也不少了,做过ASP.NET的BS架构的,也做过Winform的CS架构。有一天一位同事给我们看了下面的一个简单的Demo:

     public   class  MainTest
    {
        
static   void  Main( string [] agrs)
        {
            Book book1 
=   new  Book(); // 定义了一本书book1
            Book book2  =   new  Book(); // 定义了一本书book2
            book1.Name  =   " C#高级编程 " ; // book1的名字叫C#高级编程
            book2.Name  =   " C#高级编程 " ; // book2的名字也叫C#高级编程
            Console.WriteLine(book1  ==  book2); // 问boo1和book2是否为同一本书?
        }
    };
    
class  Book
    {
        
private   string  name  =   string .Empty;
        
public   string  Name
        {
            
get  {  return  name; }
            
set  { name  =  value; }
        }
    };

    上面的输出结果会是什么呢?有人说两本书都是<<C#高级编程>>啊,所以是同一个本书啦。其他人又有意见了,虽然名字相同,也不一定是同一本啊,我手里的和你手里的就不一样啊。其实这是一个很简单的道理,就是关于值类型和引用类型的概念问题。类属于引用类型,当我们new了不同的书时,已经在内存中不同的地方创建了Book对象,当我们比较两本书时,只是拿两本书的引用地址来比较,这和C++的指针地址原理是一样的,所以上面的比较结果会是FALSE。
    有人又有意见了,明明就是相同名字的书,为什么说他们不相等。对,你的想法是没有错误,往往我们在实际做项目时需要有这样的需求,即通过两本书的名字相同就认为是同一本书,那我们应该怎样来实现,让上面的运行结果为TRUE呢?这时候我们想到了运用操作符重载,因此,我们在Book类中添加下面的方法:
public   static   bool   operator   == (Book b1,Book b2)
{
    
if  (b1.Name  ==  b2.Name)
        
return   true ;
    
else
        
return   false ;
}
    好了,咱们编译一下,嗯?居然编不过?看提示,原来当我们定义了==的重载方法时,就必须相应的定义!=的重载方法:
public   static   bool   operator   != (Book b1, Book b2)
{
    
if  (b1.Name  ==  b2.Name)
        
return   false ;
    
else
        
return   true ;
}
    OK,编译,运行,结果为TRUE。其实这是一个非常简单的问题,而常常有人在使用的时候误以为两个类的属性相等时值也相等,由于这个小小的概念的问题,也许会造成非常严重的后果。这都是关于值类型和引用类型的理解误差。再来看下面一个Demo:
static   void  Main( string [] agrs)
{
    Book book1 
=   new  Book(); // 定义了一本书book1
    Book book2  =   new  Book(); // 定义了一本书book2
    book1.Name  =   " C#高级编程 " ; // book1的名字叫C#高级编程
    book1  =  book2; // 将两本书认为是相同的一本书
    book2.Name  =   " C#入门经典 " ; // 由于某些原因book2名字改了
    Console.WriteLine(book1.Name); // 问boo1还是原来的那本C#高级编程吗?
}
    其实答案不需要我来解释了。我费了很大的劲去说明一个很简单的引用类型的问题,很多牛人也有意见了。嗯,其实我想要表达的是,即便我们能够很熟练的使用C#一门语言,可以用它来开发很多的项目,但我们同时也不能丢掉了一些非常基础的东西,当我们熟练的去开发过了N多的项目,我们有没有扪心自问一下,我们对C#到底了解有多少?

    我并非计算机专业的学生,也没有学习过计算机专业的任何课程,甚至连C语言的课程都没有学过。我在大学的专业是土木工程,编程语言只学过Fortrun。数据结构,算法,编译原理,软件工程等我都不曾涉足,但凭借我半路出家的热情以及无限的兴趣,使我在应用那些编程语言时得心应手,VB,C++,C#都做过,项目也做过一些。在如何运用这些编程语言进行项目开发的问题上,我绝对不比一个计算机专业出来的学生差。但是,是不是就能丢掉这些基础的东西呢?答案是肯定的,不能。听说很多的编程牛人都不是计算机专业出生,这同时也极大的增加了我的信心,我要努力的把我漏下的基础的东西补上,从一个杂牌军走上正统军的道路。呵呵~所以,我的<<C#高级编程>>笔记系列由此而来,希望以后大家多多支持!:)



本文转自CoderZh博客园博客,原文链接:http://www.cnblogs.com/coderzh/archive/2007/09/22/902626.html,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
C# Python
C# 笔记1 - 操作目录
C# 笔记1 - 操作目录
33 0
|
1月前
|
C# Python
C# 笔记3 - 重载一系列像python那样的print()方法
C# 笔记3 - 重载一系列像python那样的print()方法
34 1
|
1月前
|
存储 C# C++
C# 笔记2 - 数组、集合与与文本文件处理
C# 笔记2 - 数组、集合与与文本文件处理
57 0
|
存储 网络协议 Java
C# 快速入门笔记
C# 快速入门笔记
C# 快速入门笔记
|
C# 开发工具
C#滑动拼图验证码实现笔记
C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。突发奇想,动手开发一个C#滑动拼图验证码,下面是我开发过程的记录。
C#滑动拼图验证码实现笔记
|
SQL 开发框架 算法
【读书笔记】《Effective C#》50条建议笔记整理
对《Effective C#:改善C#代码的50个有效方法》一书整理的读书笔记。
28116 5
【读书笔记】《Effective C#》50条建议笔记整理
|
C# 数据库
C#编程-65:读取数据库DataReader对象复习笔记
C#编程-65:读取数据库DataReader对象复习笔记
C#编程-65:读取数据库DataReader对象复习笔记
|
C# 数据库
C#编程-65:数据库Command对象复习笔记
C#编程-65:数据库Command对象复习笔记
C#编程-65:数据库Command对象复习笔记
|
C# 数据库
C#编程-65:连接数据库复习笔记
C#编程-65:连接数据库复习笔记
C#编程-65:连接数据库复习笔记
C#编程-64:ADO.NET对象模型复习笔记
C#编程-64:ADO.NET对象模型复习笔记
C#编程-64:ADO.NET对象模型复习笔记