2017-07-31 6 views
-2

として、私は次のクラスを持っています。私はそれが呼ばれているのか分からないが、私の知る限りでは、コードは次のようでなければなりません:それは聞こえるコール異なる機能はゲッター

public static string GetVimeoImage(string vimeoId) 
{ 
    string result = String.Empty; 
    try 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load("http://vimeo.com/api/v2/video/" + vimeoId + ".xml"); 

     XmlElement root = doc.DocumentElement; 
     result = root.FirstChild.SelectSingleNode("thumbnail_medium").ChildNodes[0].Value; 
    } 
    catch 
    { 
     //cat with cheese on it's face fail 
    } 

    return result; 
} 
+1

を推測https://i.ytimg.com/vi/{x}/mqdefault.jpg "; } ...また、タイプ/タイトルを取得することを意味しますか? – codeSetter

+0

それはしません。それは実際問題です。私はアイデアを持っていますが、どのように動かすのか分かりません。委任「のFunc 」 'のFunc <文字列、文字列>'すべきことであるが、1つの引数 –

答えて

2

私はあなたには、いくつかの奇妙な方法で継承を実現したいことを、仮定:)あなたは本当にGetThumbnailがあるべき(ここでは、適切な継承を使用する必要がありますメソッド、パラメータとして文字列を受信して​​いる場合):

public abstract class ContentVideoType 
{ 
    public virtual string Title { get; set; } 
    public virtual string GetThumbnail(string id) 
    { 
     return "Some Default Thumbnail"; 
    } 
} 

public class YouTubeContentVideType : ContentVideoType 
{ 
    public override string GetThumbnail(string id) 
    { 
     return "";//your logic for youTube 
    } 
} 

public class VimeoContentVideType : ContentVideoType 
{ 
    public override string GetThumbnail(string id) 
    { 
     return "";//your logic for vimeo 
    } 
} 

=== === UPDATE

最新の応答に基づか - ここではそれがどのように見えるかです:

 void Main() 
     {   
      foreach (var videoType in GetAll) 
      { 
       Console.WriteLine(videoType.Title + " " + videoType.GetThumbnail("1"))); 
      } 
     } 

     public abstract class ContentVideoType 
     { 
      public virtual string Title { get; } 
      public virtual string GetThumbnail(string id) 
      { 
       return "Some Default Thumbnail"; 
      } 
     } 

     public class YouTubeContentVideoType : ContentVideoType 
     { 
      public override string Title { get; } = "Youtube"; 

      public override string GetThumbnail(string id) 
      { 
       return $"https://i.ytimg.com/vi/{id}/mqdefault.jpg"; 
      } 
     } 

     public class VimeoContentVideType : ContentVideoType 
     { 
      public override string Title { get; } = "Vimeo"; 

      public override string GetThumbnail(string id) 
      { 
       return GetVimeoPreview(id); 
      } 

      public string GetVimeoPreview(string videoId) 
      { 
       return $"url:{videoId}"; //your code here; 
      } 
     } 

     public static List<ContentVideoType> GetAll 
     { 
      get 
      { 
       var result = new List<ContentVideoType> 
       { 
        new YouTubeContentVideoType(), 
        new VimeoContentVideType() 
       }; 

       return result; 
      } 
     } 
+0

うーん、更新が良く見える:) –

+0

私は私はあなたを確信したので、うれしい:) – Piotr

2

Viemoについては
var youtube = new ContentVideoType 
{ 
    Title = "Youtube", 
    GetThumbnail = (x) => { return $"https://i.ytimg.com/vi/{x}/mqdefault.jpg"; } 
}; 

var vimeo = new ContentVideoType 
{ 
    Title = "Vimeo", 
    GetThumbnail = (x) => GetVimeoImage(x) 
}; 

は、例えば、私はGetThumbnailために次の関数を呼び出す必要があります以下のようなあなたはGetThumbnailは、文字列だけではなく、文字列を返すメソッドになりたいです。 GetThumbnailだけの上に一つの引数とリターンを取る方法を受け入れること

var youtube = new ContentVideoType 
{ 
    Title = "Youtube", 
    GetThumbnail = (x) => { 
     return string.Format("https://i.ytimg.com/vi/{0}/mqdefault.jpg", x); } 
}; 

注:

public Func<string, string> GetThumbnail { get; set; } 

このコードはコンパイルさせるようなこと:あなたはそれを行うために、この方法を再宣言することができます文字列。

編集:

string thumbnail = youtube.GetThumbnail("abc"); 
+0

は、実際にはエラーは、コンパイルされません。 –

+2

を取らない: – Kyle

0

あなたはContentVideoTypeへの2つのサブクラスを作成し、それぞれがGetThumbnailの独自のバージョンを実装でした:ここではこれを使用する方法の例ですか?

それ以外の場合は、反射とゲッターを交換することができるという事実は不可能だ:https://stackoverflow.com/a/6835824/2525304

0

[OK]を、ここにあなたのコードでも..... GetThumbnail =(X)=> {リターン$」をコンパイルしてはならない、私は少しの助けを借りてそれをやった方法ですと:)

public class ContentVideoType 
{ 
    public string Title { get; set; } 

    public Func<string, string> GetThumbnail { get; set; } 
} 

public static List<ContentVideoType> GetAll 
{ 
    get 
    { 
     var result = new List<ContentVideoType> { 
      new ContentVideoType 
      { 
       Title = "Youtube", 
       GetThumbnail = videoId => $"https://i.ytimg.com/vi/{videoId}/mqdefault.jpg" 
      }, 

      new ContentVideoType 
      { 
       Title = "Vimeo", 
       GetThumbnail = videoId => GetVimeoPreview(videoId) 
      } 
     }; 

     return result; 
    } 
} 
+1

これは、理論的に働くだろうが、それは客観的なプログラミングの面で間違っています。実行時の動作を「作成」する必要が - (私が提案したように)あなたは行動がコンパイル時に知られているオブジェクトなかっ継承を使用する必要があります。これらのメソッドは、クラス内で宣言されたい場合 - のみ、それはメカニズム – Piotr

+1

ハサンとして多型を使用すること - - 私はどのようにそれができるお見せするためにあなたを更新した(上記の私の答えを参照してくださいあなたが投稿してあなたはまだ正確に同じ方法を持つことができます終わり) – Piotr