質問

このことを考え:

public class interface Person : IPerson
{
  int ID { get; protected set; }
  string FirstName { get; set; }
  string LastName { get; set; }
  string FullName { get { return FirstName + " " + LastName; } }
}

この:

public class StubPerson : IPerson
{
    int ID { get { return 0; protected set { } }
    string FirstName { get { return "Test" } set { } }
    string LastName { get { return "User" } set { } }
    string FullName { get { return FirstName + " " + LastName; } }
}

使用量:

IPerson iperson = new Person();

または:

IPerson ipersonStub = new StubPerson();

または:

IPerson ipersonMock = mocks.CreateMock<IPerson>();

な効果を宣言するの IPerson インターフェースおよび クラス"でも同時に

public class interface Person : IPerson

と思いきってこのような支援す。NET/C#?

編集:

により大量混乱と思いを明らかにする必要があるとの提案の目的:

この特徴につい書き:

interface IPerson
{
  int ID { get; }
  string FirstName { get; set; }
  string LastName { get; set; }
  string FullName { get; }
}

とこと:

public class Person : IPerson
{
  int ID { get; protected set; }
  string FirstName { get; set; }
  string LastName { get; set; }
  string FullName { get { return FirstName + " " + LastName; } }
}

私は提案しの意味変わらない。

役に立ちましたか?

解決

ると考えられる 同じようなことが前, 特に使用する場合にだけ一生産の実装インタフェースがしたいモックで試験をします。現時点で終われるようなもの。c/.hファイルの化石植物について.

疑いのなのにこのように複雑さの両方の言語としての読み込みコードす。いまだ見て議論を深より徹底したものです。その中で、あいう高い私の優先事項リストのサポートの改善のための不変のトップ:)

他のヒント

私が思うまい:

ができないのはなぜですることを宣言いたしまインターフェース:

interface IPerson
{
    string Name {get;set;}
    int ID {get;set;}
}

とを実装するクラスとインターフェースを継承し、その特性なの再宣言して

class Person : IPerson { } 
//person now has properties Name and ID

その理由をできないこともにテキストのインターフェースのコードとクラスのコードは非常に類似のもの という意味であるとの れぞれだと思います。面だけでは"実装者が決定して文字列名をゲッターやセッタ".このクラスには"を返しprivateフィールドがゲッター名はメソッドが呼び出されます。" ご利用の場合でも、自動車-産ショートカットのコンパイラの実装とロジックでも ロジック, るが所属するクラスです。で:

string Name {get;set;}

同じインタフェースとクラスは、いわけではありませんでも遠隔で同じことをしているのです。

う非常に危険なため、コンパイラの実装は任意の論理でお客様のご契約までの主張コンパイル時にまだ実施します。Itを導入することが考えられバグがトラックです。をコンパイラをデフォルトの動作がない場合の動作は定義は非常に悪い。

私はエッフェルはこのようになった。純を支援するため、複数の継承関係を示します。クラスの宣言を自動的に生成対象外になります。時にはクラスタイプは、コンパイラは主に発光するのに参考にインタフェースの種類です。の例外はコンストラクタの表現コースです。

もうその他の回答をご理解いただくためのインタフェースの抽象理論の異なるコンクリートとにもつながっていくように思いも"という思いを大切にしていを達成することができるものと類似したいのリファクタリングツール内蔵VS.

定義するクラ---

public class Person
{
  public int ID { get; protected set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string FullName { get { return FirstName + " " + LastName; } }
}

そして右クリックを選択し、Refactor->エキスインターフェース。

このことを作り分を含むファイルのインタフェースを定義クラスの、そして金型の面実装クします。

抽出されたインターフェース:

interface IPerson
{
    string FirstName { get; set; }
    string FullName { get; }
    int ID { get; }
    string LastName { get; set; }
}

思いのポイント-あけましておめでとうございま遂行による混合クラスとインターフェースの相互の関連性を検討した。何が問題で解決このアプローチを考えていますか。

この:

IPerson iperson = new Person();

は法的にC#.

編集: 解明-上記のコードは法律次

interface IPerson { }

class Person : IPerson { }

今以上のようなVisual Studioの実施私の性質から大規模シミュレーションを行い、動物の場合を依頼することができるようになります。

残念ながらこのオプションをしない、まった実装されていない例外のスタブ

いいえ、でき強くすべてのpublicメンバのインタフェース。試 簡単に、ios、androidとmac用にc#, はなく、心配です。

簡単に、ios、androidとmac用にc#でこの機能は、例えば、

  1. で記入することができ者のクラスです。
  2. できるエキスインターフェースによ 引張メッ のIPersonインターフェース。

そこでできてVisual Studioの自動生成実施スタブます。

更新

とにかくみを説のインタフェースの初めの具体的事例を挙げて、コードをお客様よりご提供いただいたご質問:

public class interface Person : IPerson
{
    int ID { get; protected set; }
    string FirstName { get; set; }
    string LastName { get; set; }
    string FullName { get { return FirstName + " " + LastName; } }
}

いことを理解するインターフェースはAbstractクラスです。インターフェースであ 契約, 青写真となることをお伝えするオブジェクトを別のオブジェクトなんでケアするようにしてください。が実装されています。

Abstractクラスなので、一方を含むことができる断片の機能を継承するとオーバーライドになります。

前項の場合において、"インターフェイス"を無効にするためには、多くの

  • せんでしたが、少し足を延ばせばを宣言する範囲の制約のインタフェースの性質公立、私立、保護され、内部とは、実装の詳細
  • せんでしたが、少し足を延ばせばを宣言するのにデフォルトの実施など、 FullName 物件か、ということは、実装の詳細

を示すことによりうまたはabstractクラスなど

public abstract class BasePerson
{
    public abstract int ID { get; protected set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual string FullName { get { return FirstName + " " + LastName; } } 
}

私は推測すが、それだけ性なものとなってしまいます。

更新2

大丈夫と思うんでたいものなのでたいものを書くことができること:

public interface IPerson
{
    int ID { get; set; }
    string FirstName { get; set; }
    string LastName { get; set; }
    string FullName { get; }
}

そのための実装だけを書く必要があるこ

public class Person : IPerson
{
    public int ID { get; protected set; }
    public string FullName { get { return FirstName + " " + LastName; } } 
}

ずに、指定の名姓ます。

最初の課題としに取り組む必要があり、この界面なアクセスを許可する区切り文字はその実装:どのような出来事が起きないようにとの性質を継承し、デフォルトのアクセス区切りである。

第二にいることを目 string FirstName { get; set; } にインターフェイス public string FirstName { get; set; } クラスが同じものがな:

  • にインターフェースの定義が表示されるメソッドシグニチャー、ゲッターおよび/またはの設定メソッドが使用可能を実装しているクラスとインターフェース。
  • クラスの定義指導のCLRを匿名のオブジェクトの値を保持するための物件です。

微妙な違いのために、プログラマーとは別世界のコンパイラです。

最後に、いるかどうかを指定しますます進行中のインタフェース、Visual Studioは行synctacticマジックが自動的にすることで、これらの財産スタブます。

と思い、より抽象化を行うことが特色はしていることが特徴となっ記 こちらの, は、役割を担う。このようなインタフェースのコードです。おばできるコードのようになります:

public role RPerson { 
  int ID { get; protected set; } 
  string FirstName { get; set; } 
  string LastName { get; set; } 
  string FullName { get { return FirstName + " " + LastName; } } 
} 

public class Person : RPerson { }

public class StubPerson : RPerson { 
    int ID { get { return 0; protected set { } } 
    string FirstName { get { return "Test" } set { } } 
    string LastName { get { return "User" } set { } } 
    string FullName { get { return FirstName + " " + LastName; } } 
} 

// ...

RPerson rperson = new Person(); 

RPerson rpersonStub = new StubPerson(); 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top