• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
denisyxc
博客园    首页    新随笔    联系   管理    订阅  订阅

C#概念整理

一、C#中多继承的问题 C# 不支持对类的多继承,每个类只能继承一个类;但支持多继承于接口,即每个类可以多继承于多个接口; 二、C# 中结构体和类的区别 c++ 中结构体和类的区别主要在于默认的可见程度不同。结构体的默认是public,类的默认可见程度是private 在C#中:结构体是值类型存放在栈上,而类是引用类型保存在堆上。结构体不能继承结构体或者类,只能实现接口,结构体也没有析构函数,和构造函数;
一、C#中多继承的问题
C# 不支持对类的多继承,每个类只能继承一个类;但支持多继承于接口,即每个类可以多继承于多个接口;
 
二、C# 中结构体和类的区别
c++ 中结构体和类的区别主要在于默认的可见程度不同。结构体的默认是public,类的默认可见程度是private
在C#中:结构体是值类型存放在栈上,而类是引用类型保存在堆上。结构体不能继承结构体或者类,只能实现接口,结构体也没有析构函数,和构造函数;
 
三、c#中的委托 (delegate)
1、 通俗解析  :相当于C++中的函数指针,设计的方法中,需要调用别的方法,但是调用的方法名还有可能发生变化,那么就可以使用代理(委托)。通过参数传递运行时需要调用的方法。
"代表函数的变量",即委托。
2、实现delegate的步骤:
实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate: 
l 声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。 
l 创建delegate对象,并将你想要传递的函数作为参数传入。 
l 在要实现异步调用的地方,通过上一步创建的对象来调用方法。 
3、 实现例子: 
C#代码
  1. using System;    
  2. public class MyDelegateTest    
  3. {    
  4. // 步骤1,声明delegate对象     
  5. public delegate void MyDelegate(string name);    
  6. // 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型     
  7. public static void MyDelegateFunc(string name)    
  8. {    
  9. Console.WriteLine("Hello, {0}", name);    
  10. }    
  11. public static void Main()    
  12. {    
  13. // 步骤2,创建delegate对象     
  14. MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateFunc);    
  15. // 步骤3,调用delegate    
  16. md("cowboy");    
  17. }    
  18. }   
 
输出结果是:Hello, cowboy
 
四、static
当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。
五、C#中abstract与virtual的区别
 1、abstract方法只能在抽象类中实现,即抽象方法所在类必须为抽象类,虚方法不是
      abstract 必须在派生类中实现,这一点跟接口interface类似,虚方法不是
2、 abstract方法不能有实现代码,因此抽象类不能直接实例化, 跟接口类似,虚方法可以有
3、 多态主要是靠virtual 和override 来实现
 
abstract声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似
  如
C#代码
  1. public abstract class Book   
  2. {   
  3.  public Book()   
  4.  {      
  5.  }   
  6.     
  7.  public abstract void getPrice();      //抽象方法,不含主体   
  8.  public virtual void getName()   //虚方法,可覆盖   
  9.  {   
  10.       Console.WriteLine("this is a test:virtual getName()");   
  11.  }   
  12.  public virtual void getContent()   //虚方法,可覆盖   
  13.  {   
  14.       Console.WriteLine("this is a test:virtual getContent()");   
  15.  }   
  16.  public void getDate()                           //一般方法,若在派生类中重写,须使用new关键字   
  17.  {   
  18.       Console.WriteLine("this is a test: void getDate()");   
  19.    }   
  20. }   
  21.     
  22. public class JavaBook:Book   
  23. {   
  24.       public override void getPrice()   //实现抽象方法,必须实现   
  25.       {   
  26.            Console.WriteLine("this is a test:JavaBook override abstract getPrice()");   
  27.       }   
  28.       public override void getName()   //覆盖原方法,不是必须的   
  29.       {   
  30.            Console.WriteLine("this is a test:JavaBook override virtual getName()");   
  31.       }   
  32. }  
 
 
 测试如下:
C#代码
  1. public class test   
  2. {   
  3.    public test()   
  4.    {   
  5.     JavaBook jbook=new JavaBook();   
  6.          jbook.getPrice();      //将调用JavaBook中getPrice()   
  7.          jbook.getName();       //将调用JavaBook中getName()   
  8.          jbook.getContent();    //将调用Book中getContent()   
  9.          jbook.getDate();       //将调用Book中getDate()   
  10.     
  11.     }   
  12.    public static void Main()   
  13.    {   
  14.     
  15.        test t=new test();   
  16.    }   
  17. }   

欢迎您到我在百洋软件实验室的正式博客里留言讨论

本文C#概念整理转载自百洋软件实验室

posted @ 2009-08-04 09:36  denisyxc  阅读(219)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3