2016-10-12 22 views
0

私はヘルパーメソッドを含む基本クラスを持っており、いくつかの仮想メソッドを含むいくつかの派生クラスを持っています。基本クラスの派生クラスオブジェクトを使用

だから、私はどのように基本クラスの仮想メソッドで派生クラスオブジェクトを使用することができます知りたいですか?オブジェクトのpropertiesをチェックしているFromStream方法として

派生クラス

class myclass :baseClass 
{ 
    public string id { get; set; } 

    public string name { get; set; } 

} 

基底クラス

public abstract class baseClass 
{ 

    public virtual object FromStream() 
    { 
     string name, type; 

     List<PropertyInfo> props = new List<PropertyInfo>(typeof(object).GetProperties()); // here I need to use derived class object 

     foreach (PropertyInfo prop in props) 
     { 
      type = prop.PropertyType.ToString(); 
      name = prop.Name; 

      Console.WriteLine(name + " as "+ type); 
     } 
     return null; 
    } 

メイン

static void Main(string[] args) 
    { 
     var myclass = new myclass(); 
     myclass.FromStream(); // the object that I want to use it 

     Console.ReadKey(); 
    } 
+4

」派生クラスオブジェクトを使用する " - あなたはどういう意味ですか? GetType()。GetProperties()を呼びたいかもしれないと思います。 Btw、サンプルコードでも.NETの命名規則に従い、*完全な*サンプルコードを提供すると便利です。 (あなたの 'Main'メソッドは宣言されていないクラスにあり、' x'も宣言されていません...) –

+0

あなたの最終目標は_really_不明です。あなたは何らかの種類の(シ)シリアライザを構築しようとしているようです。既存のAPIの使用を検討しましたか?また、 'typeof(TypeHere)'の代わりに 'someInstance.GetType()'やジェネリックを使うこともできます。 – CodeCaster

+0

基本クラスを汎用クラスにしたいので、すべての派生クラスでfromStreamメソッドを使用できます。したがって、基本クラスオブジェクトを使用してmainからfromStreamを呼び出すと、そのオブジェクトをfromStreamメソッドで使用します。 –

答えて

1

、私はあなたがgenericsを使用することができると思います。

コード例:

public abstract class BaseClass 
{ 
    public virtual object FromStream<T>(string line) 
    { 
     string name, type; 

     List<PropertyInfo> props = new List<PropertyInfo>(typeof(T).GetProperties()); 

     foreach (PropertyInfo prop in props) 
     { 
      type = prop.PropertyType.ToString(); 
      name = prop.Name; 

      Console.WriteLine(name + " as " + type); 
     } 
     return null; 
    } 
} 

public class MyClass : BaseClass 
{ 
    public string id { get; set; } 

    public string name { get; set; } 
} 

消費する:

var myclass = new MyClass(); 
myclass.FromStream<MyClass>("some string"); 

プロパティをチェックする必要があるのいずれかtypeは、そうすることによってで渡すことができます。

public virtual object FromStream<T>(string line) 

EDIT:また、あなたが@ジョンスキートで述べたアプローチに従うことに注意してください - は以下のようにあなたがFromStreamメソッドを書くことができ、その場合にはGetType().GetProperties()

を使用する例:私がする必要がある

ここ
public virtual object FromStream(string line) 
{ 
    string name, type; 

    List<PropertyInfo> props = new List<PropertyInfo>(GetType().GetProperties()); 

    foreach (PropertyInfo prop in props) 
    { 
     type = prop.PropertyType.ToString(); 
     name = prop.Name; 

     Console.WriteLine(name + " as " + type); 
    } 
    return null; 
} 
+0

それは素晴らしい仕事です、ありがとう –

関連する問題