2016-10-19 7 views
0

IUserがあり、void GetTasks()string GetRole() を実装しています。クラスを作成します。注入されたクラス(C#)からメソッドを呼び出すときにエラーが発生する

public class EmployeeRole : IUser 
{ 
    public void GetTasks() 
    { 
    //Get task 
    } 

    public string GetRole() 
    { 
     return "Employee"; 
    } 

    public void EmployeeSpecificTask() 
    { 
     Console.Write("This is an employee's specific task."); 
    } 
} 

クラスを作成し、そのクラスを私のProfile.csクラスに注入するように計画した後です。ここでは、コードされた:EmployeeSpecificTask()を呼び出すときに、私はエラーを取得していますなぜ

`public class Profile 
    { 
    private readonly IUser _user; 

    public Profile(IUser user) 
    { 
     this._user = user; 
    } 
    public void DisplayTask() 
    { 
     _user.GetTasks(); 

    } 
    public string MyRole() 
    { 
     return _user.GetRole(); 
    } 

    //The error goes here 
    public void MySpecificTask() 
    { 
     _user.EmployeeSpecificTask(); 
    } 
    public void Greetings() 
    { 
     Console.WriteLine("Hello! Welcome to profile."); 
    } 
} 

注入 Profile profile = new Profile(new EmployeeRole());

のためのテストプログラム私の質問はありますか? 私はEmployeeRoleクラスにEmployeeSpecificTask()を持っています。

+0

エラーが表示されますか? – CodexNZ

+0

@CodexNZここでは、 '' IUser 'に' EmployeeSpecificTask 'の定義が含まれず、' IUser 'タイプの最初の引数を受け入れる拡張メソッド' EmployeeSpecificTask 'が見つかりませんでした。 " – datkom

+0

したがって、IUserインターフェイス定義ではGetTasks ()メソッドとGetRole()メソッドを実装し、このインタフェースの実装でEmployeeSpecificTask()メソッドが追加されました。 – CodexNZ

答えて

1

たIUserインタフェースは以下の通りである場合:

public interface IUser 
{ 
void GetTasks(); 
void GetRole(); 
} 

のみたIUserオブジェクトが与えられ消費クラスのみがそのインターフェイス上でメソッドまたはプロパティにアクセスすることができます。 あなたがEmployeeSpecificTask()メソッドを含んでいるインターフェイスタイプを通過する場合は、以下のような別のインターフェイスを定義する必要があります。

public interface INewInterface : IUser 
{ 
    void EmployeeSpecificTask(); 
} 

これは消費するクラスへのアクセスを提供するために新しいものとたIUserインターフェースを組み合わせましたIUserメソッドとアクセスしたい新しいメソッドの両方に渡します。 次に、新しいインターフェイスタイプを使用するようにProfileコンストラクタを変更する必要があります。

public class Profile 
{ 
    private readonly INewInterface _user; 

    public Profile(INewInterface user) 
    { 
     this._user = user; 
    } 

    public void DisplayTask() 
    { 
    _user.GetTasks(); 

    } 

    public string MyRole() 
    { 
    return _user.GetRole(); 
    } 

    public void MySpecificTask() 
    { 
    _user.EmployeeSpecificTask(); 
    } 

    public void Greetings() 
    { 
    Console.WriteLine("Hello! Welcome to profile."); 
    } 
} 
関連する問題