- PR -

C#でのinterfaceの継承について

1
投稿者投稿内容
Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 2005-07-13 14:23
以下の様なコードを実装したいのですが、interfaceの継承がうまく出来ません。

[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("XXXX")]
public interface IBaseInterface
{
// Methods
bool Load(string strFile);
bool Save(string strFile);
// Properties
bool IsLoaded
{
get;
}
}

[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("XXXX")]
public interface INewInterface : IBaseInterface
{
}


/// <summary>
/// Class_BaseClass の概要の説明です。
/// </summary>
[GuidAttribute("XXXX")]
[ClassInterface(ClassInterfaceType.None)]
public class Class_BaseClass
{
public Class_BaseClass()
{
}
public virtual bool Load(string strFile)
{
return true;
}

public virtual bool Save(string strFile)
{
return true;
}

public bool IsLoaded
{
get
{
return true;
}
}
}


/// <summary>
/// 派生クラス の概要の説明です。
/// </summary>
[Guid("XXXX")]
[ClassInterface(ClassInterfaceType.None)]
public class Class_NewClass : Class_BaseClass, INewInterface
{
public Class_NewClass()
{
}

public override Load(string strFile)
{
return true;
}

public override Save(string strFile)
{
return true;
}
}
餅宮餅吉
ベテラン
会議室デビュー日: 2005/03/04
投稿数: 57
お住まい・勤務地: 月餅のうまい店の隣
投稿日時: 2005-07-13 14:41
こんにちわ。餅宮です。
引用:

Orionさんの書き込み (2005-07-13 14:23) より:
以下の様なコードを実装したいのですが、interfaceの継承がうまく出来ません。


どううまくいかないのでしょうか?

コード:
public class Class_NewClass : Class_BaseClass, INewInterface
{
    public Class_NewClass()
    {
    }

    public override Load(string strFile)
    {
        return true;
    }

    public override Save(string strFile)
    {
        return true;
    }
}


Load,Saveメソッドの戻り値がないからということじゃないよね?
Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 2005-07-13 14:45
早速のレスありがとうございます。

public interface INewInterface : IBaseInterface
の部分のビルドが通らないのです。
new が要ると言われるのですが...
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-07-13 15:33
引用:

new が要ると言われるのですが...



C# では、COM の IUnnknown, IDispatch 以外のカスタムインターフェースを継承元としたインターフェースは表現しづらいです。

面倒ですが、変に凝らずに

public interface IBaseInterface
{
void DoSomeThing();
}

public interface INewInterface // : IBaseInterface
{
#region IBaseInterface メンバ

void DoSomeThing();

#endregion

void DoSomeThing2();
}

とするのが吉です。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 2005-07-14 00:10
レスどうも有難うございました。

インターフェースの継承はやめて個別に定義します。
1

スキルアップ/キャリアアップ(JOB@IT)