2016-11-09 5 views
-2

私は、クラス内の多型関数をオーバーライドする方法を理解しています。 私は理解していないものは、オブジェクトのためにそれを使用する方法です。C#での多態性の仕方(ノーマルとアブストラクト)

abstract class Film 
{ 
    protected string film_name; 

    public Film(string film_name) 
    { 
     this.film_name = film_name; 
    } 

    public string GetFilmName() 
    { 
     return this.film_name; 
    } 



} 

class Siries : Film 
{ 
    private int season_number; 

    public Siries 
    { 
     // What do i need to write here? and why?.. 
    } 


} 
+0

C#多型に関するいくつかのガイドを読む必要があります。https://msdn.microsoft.com/en-us/library/ms173152.aspxおよびhttps://msdn.microsoft.com/en-us/library /k6sa6h87.aspx –

+0

ポリモーフィズムは、コンストラクタよりもメソッドやプロパティをオーバーライドする方法です...オブジェクトの使い方はどういう意味ですか?クラスはオブジェクトのテンプレートなので、クラスの場合はそれ以上はありません「対象」を理解する。 – Divisadero

+3

落ち込んでしまうと、ある人が本をつかむことができます。 –

答えて

0

シリウスが特定のフィルムである場合。

キーワード "base"は、ベースクラス "Film"のコンストラクタを呼び出します。

public Siries() : base("siries") 
{ 
} 

名前と番号でシリーズを作成する場合は、このようにする必要があります。

public Siries(string siries_name, int season_number) : base(siries_name) 
{ 
    this.season_number = season_number; 
} 
0

あなたが期待しているものの答えになるかもしれません。

派生クラスを指す基本クラスのオブジェクトを作成するだけです。これは継承の概念です。あなたの例によると

Film f = new Siries(); 
f.method()// Method what you expect to call by object 
0

私はとプロパティの代わりGet機能のを再設計提案します。派生クラスのコンストラクタでのご質問のようあなたは

  • 何かこのよう派生クラスロジックを追加

    • コール適切な基底クラスのコンストラクタを実装する必要があります。

      abstract class Film { 
          // let field be private, but property be protected 
          private string m_FilmName; 
      
          public Film(string filmName) { 
           FilmName = filmName; 
          } 
      
          // FilmNam is more natural/readable in your case than GetFilmName() method 
          public string FilmName { 
           get { 
           return m_FilmName; 
           } 
           protected set { // "private set" seems to be a better choice 
           // do not forget to validate the input value in public/protected methods 
           if (string.IsNullOrWhiteSpace(value)) 
            throw new ArgumentNullException("value", 
            "FileName must not be null or white space"); 
      
           m_FilmName = value; 
           } 
          } 
          } 
      

      ...

      class Siries: Film { 
          private int m_SeasonNumber; 
      
          // Answer: 
          // 1. You have to call base class constructor ": base(filmName)" 
          // 2. Add up some logic with "seasonNumber" - "SeasonNumber = seasonNumber;" 
          public Siries(String filmName, int seasonNumber = 1) 
           : base(filmName) { 
      
           SeasonNumber = seasonNumber; 
          } 
      
          public int SeasonNumber { 
           get { 
           return m_SeasonNumber; 
           } 
           protected set { // may be "private set" or just "set" (public) 
           // do not forget to validate the input value in public/protected methods 
           if (value <= 0) 
            throw new ArgumentOutOfRange("value", "SeasonNumber must be positive"); 
      
           m_SeasonNumber = value; 
           } 
          } 
          }