C#概念整理
一、C#中多继承的问题
C# 不支持对类的多继承,每个类只能继承一个类;但支持多继承于接口,即每个类可以多继承于多个接口;
二、C# 中结构体和类的区别
c++ 中结构体和类的区别主要在于默认的可见程度不同。结构体的默认是public,类的默认可见程度是private
在C#中:结构体是值类型存放在栈上,而类是引用类型保存在堆上。结构体不能继承结构体或者类,只能实现接口,结构体也没有析构函数,和构造函数;
三、c#中的委托 (delegate)
1、 通俗解析 :相当于C++中的函数指针,设计的方法中,需要调用别的方法,但是调用的方法名还有可能发生变化,那么就可以使用代理(委托)。通过参数传递运行时需要调用的方法。
"代表函数的变量",即委托。
2、实现delegate的步骤:
实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate:
l 声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。
l 创建delegate对象,并将你想要传递的函数作为参数传入。
l 在要实现异步调用的地方,通过上一步创建的对象来调用方法。
3、 实现例子:
C#代码
- using
System; - public
class MyDelegateTest - {
- //
步骤1,声明delegate对象 - public
delegate void MyDelegate( stringname); - //
这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型 - public
static void MyDelegateFunc( stringname) - {
- Console.WriteLine("Hello,
{0}" ,name); - }
- public
static void Main() - {
- //
步骤2,创建delegate对象 - MyDelegate
md new= MyDelegate(MyDelegateTest.MyDelegateFunc); - //
步骤3,调用delegate - md("cowboy");
- }
- }
输出结果是:Hello, cowboy
四、static
当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。
五、C#中abstract与virtual的区别
2、 abstract方法不能有实现代码,因此抽象类不能直接实例化, 跟接口类似,虚方法可以有
3、 多态主要是靠virtual 和override 来实现
abstract声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似
C#代码
- public
abstract class Book - {
-
public Book() -
{ -
} -
-
public abstract void getPrice(); //抽象方法,不含主体 -
public virtual void getName() //虚方法,可覆盖 -
{ -
Console.WriteLine( is );a test:virtual getName()" -
} -
public virtual void getContent() //虚方法,可覆盖 -
{ -
Console.WriteLine( is );a test:virtual getContent()" -
} -
public void getDate() //一般方法,若在派生类中重写,须使用new关键字 -
{ -
Console.WriteLine( is );a test: void getDate()" -
} - }
-
- public
class JavaBook:Book - {
-
override void getPrice() //实现抽象方法,必须实现 -
{ -
Console.WriteLine( is );a test:JavaBook override abstract getPrice()" -
} -
override void getName() //覆盖原方法,不是必须的 -
{ -
Console.WriteLine( is );a test:JavaBook override virtual getName()" -
} - }
C#代码
- public
class test - {
-
test() -
{ -
JavaBook jbook= JavaBook(); -
jbook.getPrice(); -
jbook.getName(); -
jbook.getContent(); -
jbook.getDate(); -
-
} -
static void Main() -
{ -
-
test t= test(); -
} - }
欢迎您到我在百洋软件实验室的正式博客里留言讨论
本文C#概念整理转载自百洋软件实验室