面向對象編程,可以使重複代碼變少,通過類實現。面對對象三大特徵:封裝、繼承、多態。要有重用性、靈活性和擴展性。
1表現c#面向對象的編程。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
class He
{
public void Ndf()
{
Console.WriteLine("第一步看正店。");
}
public void Rwe(string thing)
{
Console.WriteLine("我看中了"+thing+"這家店。");
}
public void Rfs()
{
Console.WriteLine("決定吃土買。");
}
}
class Program
{
public static void Main(string[] args)
{
He t = new He();
t.Ndf();
t.Rwe("華姿儀賞");
t.Rwe("小先生漢服");
t.Rfs();
Console.ReadKey();
}
}
}
封裝與繼承:
封裝即將數據和方法等集合在一個個單元中,我們稱之爲類,意義:保護代碼,屏蔽複雜性。
繼承即一個類繼承於另一個類,即這個類包含另一個類的東西但用不等於另一個類。被繼承的類叫父類或者基類,繼承的類叫子類或者派生類。
比如:
class A{
blablablabalbalbabla
}
class B:A{
}
抽象類:abstract(父類)和override(子類),父類中抽象方法不能實現,父類抽象方法只能出現在抽象類中。抽象類不能直接實例化(即 XXX t=new XXX()😉。
子類的數據可以用父類來定義,即多態。
抽象類中可以有普通方法。
??待解決問題:抽象類不能實例化,那抽象類中的普通方法怎麼使用????
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
public abstract class Food
{
//在抽象父類中是不能定義方法,否則報錯。
public abstract void Eat();
public void Sdw()
{
Console.WriteLine("傷害+1。");
}
}
//繼承子類:父類
//子類的函數前面要賈override
public class Apple : Food
{
public override void Eat()
{
Console.Write("Hp+10。");
}
}
public class Water : Food
{
public override void Eat()
{
Console.WriteLine("Mp+10。");
}
}
class Program
{
public static void Main(string[] args)
{
Food t = new Apple();
Food f = new Water();
//抽象類不能實例化那怎麼使用抽象類的普通方法??
t.Eat();
f.Eat();
Console.ReadKey();
}
}
}
內存中有五個區域:
1 代碼區
2常量區(用於存放常量)
3堆區(由程序員自己開闢並管理內存)
4棧區(系統自動管理)
5靜態區(全局區)(程序運行過程不釋放)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
interface IDww
{
int x
{
get;
set;
}//接口中允許這樣定義int變量,聲明屬性存取規則。
int y
{
get;
set;
}
//void Dse();
}//接口中方法不允許有指令,接口是聲明抽象,不能實例。
class Mypoint :IDww//方法的實現是在接口的類中
{
private int myx;
private int myy;
public Mypoint(int x,int y)//構造函數
{
Console.WriteLine("接口的方法。");
myx = x;
myy = y;
}
//接口定義中屬性成員x的實現
public int x
{
get
{
return myx;
}
set
{
myx=value;//這個地方不懂》》》》
}
}
//接口定義中y屬性的實現
public int y
{
get
{
return myy;
}
set
{
myy = value;
}
}
}//接口的定義 interface Iblablablablabla(前綴必有I)。
class MainClass
{
private static void PrintPoint(IDww p)//接口
{
Console.WriteLine("x={0},y={1}", p.x,p.y);
}
public static void Main(string[] args)
{
Mypoint p = new Mypoint(2, 3);
Console.Write("My Point: ");
PrintPoint(p);
Console.ReadKey();
}
}
}