Notes:
數據private類型,大部分方法public類型;
如果有繼承或者相互引用,注意數據的公有還是私有,保證數據的只讀性質;
C#不能夠像C++一樣在數據聲明時調用構造函數,必須使用Myclass temp = new Myclass()來調用構造函數;
C#不支持多重繼承關系, 也就是說,一個派生類不允許有多個基類。簡單點就是,父親可能有好多兒子(父類可以派生出許多子類),但是一個孩子只能有一個爸爸(子類不允許多重繼承關系);
C#和其他面向對象一樣,重載,多態,虛函數,抽象類這些特性都有;
重載和C++中的重載毫無區別,只有一個問題是在重載大小比較運算符(<, >=, >, <=, ==, !=)的時候,必須成對的重載;
虛函數需加virtual聲明,派生類中需要重寫,并且添加override聲明;
抽象函數需加abstract聲明,并且基類中沒有執行代碼,只能在繼承類中添加;
如果需要傳出多個值,需要用到ref聲明或out聲明;
ref聲明的對象必須提前初始化;
out聲明的對象不需要提前初始化;
如果類中有靜態對象,可以使用靜態構造函數對靜態對象進行賦值操作。
Example:
ElemType.cs
namespace Test_Class
{
class ElementType
{
private int value;
public ElementType() { value = 0; }
public ElementType(int _v)
{
this.value = _v;
}
public void disp()
{
Console.WriteLine("value is {0}", value);
}
public void edit(int _v)
{
this.value = _v;
}
public int reff()
{
return this.value;
}
}
class package
{
private ElementType x;
private ElementType y;
public package()
{
this.x = new ElementType();
this.y = new ElementType();
}
/// <summary>
/// 構造函數
/// </summary>
/// <param name="_x">x</param>
/// <param name="_y">y</param>
public package(int _x, int _y)
{
this.x = new ElementType(_x);
this.y = new ElementType(_y);
}
public void disp()
{
Console.WriteLine("package display");
Console.WriteLine("/tx vaule is {0}", this.x.reff());
Console.WriteLine("/ty vaule is {0}", this.y.reff());
Console.WriteLine();
}
/// <summary>
/// 修改值
/// </summary>
/// <param name="_x">x</param>
/// <param name="_y">y</param>
public void modify(int _x, int _y)
{
this.x.edit(_x);
this.y.edit(_y);
}
public void copyto(ref package p)
{
p.modify(this.x.reff(), this.y.reff());
}
}
}
Program.cs
namespace Test_Class
{
class Program
{
static void Main(string[] args)
{
package p1 = new package(5, 5);
package p0 = new package();
p0.disp();
p1.disp();
p1.copyto(ref p0);
p0.disp();
p0.modify(10, 50);
p0.disp();
Console.ReadLine();
}
}
}
新聞熱點
疑難解答