對接口成員的訪問
對接口方法的調用和采用索引指示器訪問的規則與類中的情況也是相同的
using System ;
interface ISequence {
int Count { get; set; }
}
interface IRing {
void Count(int i) ;
}
interface IRingSequence: ISequence
class CTest {
void Test(IRingSequence rs) {
//rs
//rs
((ISequence)rs)
((IRing)rs)
}
}
上面的例子中
再看下面的例子
using System ;
interface IInteger {
void Add(int i) ;
}
interface IDouble {
void Add(double d) ;
}
interface INumber: IInteger
class CMyTest {
void Test(INumber Num) {
// Num
Num
((IInteger)n)
((IDouble)n)
}
}
調用Num
接口的多重繼承的問題也會帶來成員訪問上的問題
interface IBase {
void FWay(int i) ;
}
interface ILeft: IBase {
new void FWay (int i) ;
}
interface IRight: IBase
{ void G( ) ; }
interface IDerived: ILeft
class CTest {
void Test(IDerived d) {
d
((IBase)d)
((ILeft)d)
((IRight)d)
}
}
上例中
類對接口的實現
前面我們已經說過
下面的例子給出了由類來實現接口的例子
using System ;
interface ISequence {
object Add( ) ;
}
interface ISequence {
object Add( ) ;
}
interface IRing {
int Insert(object obj) ;
}
class RingSequence: ISequence
{
public object Add( ) {…}
public int Insert(object obj) {…}
}
如果類實現了某個接口
using System ;
interface IControl {
void Paint( );
}
interface ITextBox: IControl {
void SetText(string text);
}
interface IListBox: IControl {
void SetItems(string[] items);
}
interface IComboBox: ITextBox
這裡
前面我們已經看到
interface IDataBound {
void Bind(Binder b);
}
public class EditBox: Control
public void Paint( );
public void Bind(Binder b) {
}
類EditBox從類Control中派生並且實現了Icontrol和IdataBound
public class EditBox: IControl
void IControl
void IDataBound
}
因為通過外部指派接口成員實現了每個成員
class Test {
static void Main( ) {
EditBox editbox = new EditBox( );
editbox
IControl control = editbox;
control
}
}
上例中
如果每個成員都明顯地指出了被實現的接口
public class EditBox: IControl
void IControl
void IDataBound
}
顯式接口成員只能通過接口調用
class CTest {
static void Main( ) {
EditBox editbox = new EditBox( ) ;
editbox
IControl control = editbox;
control
}
}
上述代碼中對editbox
注釋
知道了怎樣訪問接口
類對接口的實現
前面我們已經說過
下面的例子給出了由類來實現接口的例子
using System ;
interface ISequence {
object Add( ) ;
}
interface ISequence {
object Add( ) ;
}
interface IRing {
int Insert(object obj) ;
}
class RingSequence: ISequence
{
public object Add( ) {…}
public int Insert(object obj) {…}
}
如果類實現了某個接口
using System ;
interface IControl {
void Paint( );
}
interface ITextBox: IControl {
void SetText(string text);
}
interface IListBox: IControl {
void SetItems(string[] items);
}
interface IComboBox: ITextBox
這裡
前面我們已經看到
interface IDataBound {
void Bind(Binder b);
}
public class EditBox: Control
public void Paint( );
public void Bind(Binder b) {
}
類EditBox從類Control中派生並且實現了Icontrol和IdataBound
public class EditBox: IControl
void IControl
void IDataBound
}
因為通過外部指派接口成員實現了每個成員
class Test {
static void Main( ) {
EditBox editbox = new EditBox( );
editbox
IControl control = editbox;
control
}
}
上例中
如果每個成員都明顯地指出了被實現的接口
public class EditBox: IControl
void IControl
void IDataBound
}
顯式接口成員只能通過接口調用
class CTest {
static void Main( ) {
EditBox editbox = new EditBox( ) ;
editbox
IControl control = editbox;
control
}
}
上述代碼中對editbox
注釋
From:http://tw.wingwit.com/Article/program/net/201311/12509.html