類的封裝
namespace ConsoleApp1
{
class MyClass
{
private int x = 0;
private int y = 0;
public int X
{
get
{
return x;
}
set
{
x = value;
}
}
public int Y
{
get
{
return y;
}
set
{
y = value;
}
}
public int Add()
{
return X + Y;
}
}
class Program
{
static void Main()
{
MyClass myclass = new MyClass();
myclass.X = 3;
myclass.Y = 5;
Console.WriteLine(myclass.Add());
}
}
}
類的繼承
在c#中一次只允許繼承一個類,不能同時繼承多個類
利用類的繼承機制,用戶可以通過增加、修改或替換類中的方法對這個類進行擴充
使用:來標識兩個類的繼承關係,子類不能訪問基類的私有成員,可訪問公共成員
只有子類才能訪問protected成員,基類和外部代碼都不能訪問
namespace ConsoleApp1
{
class MyClass1
{
private int x = 0;
private int y = 0;
public int X
{
get
{
return x;
}
set
{
x = value;
}
}
public int Y
{
get
{
return y;
}
set
{
y = value;
}
}
public int Add1()
{
return X + Y;
}
}
class MyClass2 : MyClass1
{
private int z = 0;
public int Z
{
get
{
return z;
}
set
{
z = value;
}
}
public int Add2()
{
return X + Y + Z;
}
}
class Program
{
static void Main()
{
MyClass1 myclass1 = new MyClass1();
MyClass2 myclass2 = new MyClass2();
myclass1.X = 3;
myclass1.Y = 5;
myclass2.X = 3;
myclass2.Y = 5;
myclass2.Z = 7;
Console.WriteLine(myclass1.Add1());
Console.WriteLine(myclass2.Add1());
Console.WriteLine(myclass2.Add2());
}
}
}
8
8
15
重構
子類與父類的成員方法返回值、方法名稱、參數類型及個數完全相同,唯一不同的是方法實現內容
類的多態
多態使子類的實例可以直接賦予基類的變量(這裏不需要進行強制類型轉換),然後直接就可以通過這個變量調用子類的方法
利用多態可以使程序具有良好的擴展性,並可以對所有類對象進行通用的處理。
namespace ConsoleApp1
{
class Program
{
private Program[] qtest = new Program[6];
private int nextIndex = 0;
public void draw(Program q)
{
if (nextIndex < qtest.Length)
{
qtest[nextIndex] = q;
Console.WriteLine(nextIndex);
nextIndex++;
}
}
static void Main()
{
Program q = new Program();
q.draw(new Square());
q.draw(new Parallelogramgle());
}
}
class Square : Program
{
public Square()
{
Console.WriteLine("正方形");
}
}
class Parallelogramgle : Program
{
public Parallelogramgle()
{
Console.WriteLine("平行四邊形");
}
}
}