2016-07-04 12 views
1
[Serializable] 
[DataContract()] 
public sealed class B: BaseB 
{ 
    public B() 
    { 
     SourceContainerFolderName = string.Empty; 
    } 

    [DataMember(Name = "sourceContainer ")] 
    public string SourceContainer { get; set; } 

    [DataMember(Name = "sourceContainerFolderName ")] 
    public string SourceContainerFolderName { get; set; } 

    public A GetA() 
    { 
     return new A 
     { 
      ContainerName = SourceContainer, 
      FolderName = SourceContainerFolderName, 
     }; 
    } 
} 

DataContract - GetA()でメソッドの拡張メソッドinstedofを作成してください。私はクラスからこのメソッドを削除し、拡張メソッドを使用したいと思います。これを行う方法?拡張メソッドを追加するには?

public static A GetA(this B baseB) 
{ 
    return new A 
    { 
     ContainerName = baseB.SourceContainer, 
     FolderName = baseB.SourceContainerFolderName, 
    }; 
} 

が編集、タイプBのオブジェクトを使用した型のオブジェクトを作成し、この拡張メソッドは、あなたがこのようにそれを使用することができます:私はcompletlyあなたの質問を理解し、これを試してきた

+0

「A.ContainerName」と「A.FolderName」はどこに定義されていますか? – spender

+0

申し訳ありませんが、間違いをします。質問は更新されました –

+1

私はちょうど1週間前にこの正確な件名で書いたブログ記事です。なんて都合のいい! [http://scotthannen.org/blog/2016/06/25/extension-methods.html] (http://scotthannen.org/blog/2016/06/25/extension-methods.html) –

答えて

1

イムわかりません:

B b = new B(); 
A a = B.GetA(); // Here's is the use of the extension 
+0

構文正しいのですが、拡張メソッドは静的クラスで定義しなければならないことも言及してください。 – derpirscher

+0

真実、私の間違い^^ – Haytam

0

拡張メソッドは、最初のパラメータとしてstatic class有する特殊this Tパラメータでstaticメソッドとして定義されなければならない

public static class Extensions { 

    public static A GetA(this B me) 
    { 
     if (me == null) throw new ArgumentNullException(); 
     return new A { 
      ContainerName = me.SourceContainer, 
      FolderName = me.SourceContainerFolderName 
     }; 
    } 

} 

詳細については、https://msdn.microsoft.com/en-us/library/bb383977.aspxを参照してください。

関連する問題