2 回答

TA貢獻1852條經(jīng)驗 獲得超7個贊
Class,一個繼承他的類叫subClass,那么subClass也算是baseClass類型的,可以有這樣的寫法baseClass bc=new subClass()
接口也是一樣,如果一個類MyClass實現(xiàn)了借口一個接口interfaceClass,你事實上可以把MyClass叫做interfaceClass的子類,可以有這樣的寫法interfaceClass ic=new MyClass()
這就是所說的多態(tài)的一部分基礎(chǔ)??梢耘e個實在點的例子,比如你想寫一個方法叫EnumAll,參數(shù)是一個類的實例,作用是例舉出該實例中的每個子元素并打印出元素的ToString(如窗體的子元素是窗體中的控件,數(shù)組的子元素就不用說了吧),你就遇到兩個問題
首先EnumAll參數(shù)的類型是什么。參數(shù)應(yīng)該可以是一個Form類型,因為窗口中有很多控件,使用EnumAll和一個Form的實例做參數(shù)可以打印出包含在該參數(shù)窗體中的每個控件的名字;但是一個數(shù)組Object[]類型應(yīng)該也可以使用EnumAll方法,EnumAll可以列舉Object[]中的每個元素并打印。你是要把方法寫成void EnumAll(Form e)還是寫成void EnumAll(Object[] e)?
然后就是EnumAll怎樣實現(xiàn)才能得到不同類型的實例的子元素?如果是void EnumAll(Form e)的形式,要想得到子元素要用
foreach(Control c in e.Controls)
{
Console.WriteLine(c.ToString());
}
的寫法,如果數(shù)組要用
for(int i=0;i<e.length;++i)
{
Console.WriteLine(e[i].ToString());
}
的實現(xiàn)方法。
Form和Object[]是兩種完全不沾邊的類型,那么EnumAll到底該怎么寫?
這時就可以使用接口,可以定義一個接口
interface IEnumable
{
Object next();//返回下一個子元素的方法
}
然后使Form和Object[]類型都實現(xiàn)IEnumable接口(實現(xiàn)方法是不同的,如前面所說),然后這樣寫EnumAll方法:
void EnumAll(IEnumable e)//一開始就說了,實現(xiàn)接口的類都可以算是接口的子類
{Object o;
while((o=e.next)!=null)
{
Console.WriteLine(o.ToString());
}
}
于是解決了上面的問題。
不知道有沒有說清楚,如果理解了上面舉的例子算是初步了解接口了,接口的多繼承和多態(tài)性還有很多內(nèi)容。
另外,上面的東西只是舉例子,雖然C#中確實有IEnumable接口,但其定義要復(fù)雜的多,我只是舉個簡化的自己編的例子^_^。C#的(應(yīng)該說是FCL吧)很多類都實現(xiàn)了IEnumalbe接口,像集合類和數(shù)組等。
FCL是.NET框架類庫,F(xiàn)ramework Class Library,不論在C#,J#,VB.NET或其他.NET開發(fā)語言中使用的.NET提供的類都是FCL中的類,就是說,.NET的開發(fā)其實是和語言無關(guān)的。不同語言編寫的程序由于使用同一類庫(其實等于被翻譯成了同一種中間語言,Common Intermediate Language, CIL),使得各種不同語言寫的程序集可以通用。

TA貢獻1827條經(jīng)驗 獲得超4個贊
private Word.Application G_wa= new Microsoft.Office.Interop.Word.Application();
如果按CTRL+J有提示就是成功,沒提示就是沒引用
- 2 回答
- 0 關(guān)注
- 149 瀏覽
添加回答
舉報