在基础 class 中使用派生的 class 对象
use derived class object in base class
我有一个包含辅助方法的基础 class,我有一些包含一些虚拟方法的派生 class。
所以,我想知道如何在基础 classes 虚拟方法中使用派生的 class 对象?
派生class
class myclass :baseClass
{
public string id { get; set; }
public string name { get; set; }
}
基础class
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();
}
由于方法 FromStream
正在检查对象的 properties
,我认为您可以使用 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)
编辑:另请注意,您可以按照@Jon Skeet 提到的方法 - 即使用 GetType().GetProperties()
在这种情况下,您可以按如下方式编写 FromStream
方法:
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;
}
我有一个包含辅助方法的基础 class,我有一些包含一些虚拟方法的派生 class。
所以,我想知道如何在基础 classes 虚拟方法中使用派生的 class 对象?
派生class
class myclass :baseClass
{
public string id { get; set; }
public string name { get; set; }
}
基础class
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();
}
由于方法 FromStream
正在检查对象的 properties
,我认为您可以使用 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)
编辑:另请注意,您可以按照@Jon Skeet 提到的方法 - 即使用 GetType().GetProperties()
在这种情况下,您可以按如下方式编写 FromStream
方法:
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;
}