《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#高级编程>>笔记系列由此而来,希望以后大家多多支持!:)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值