有没有办法引用继承抽象类的类(即Type
)?
class abstract Monster
{
string Weakness { get; }
string Vice { get; }
Type WhatIAm
{
get { /* somehow return the Vampire type here? */ }
}
}
class Vampire : Monster
{
string Weakness { get { return "sunlight"; }
string Vice { get { return "drinks blood"; } }
}
//somewhere else in code...
Vampire dracula = new Vampire();
Type t = dracula.WhatIAm; // t = Vampire
对于那些好奇的人...... 我在做什么:我想知道我的网站上次发布的时间。 .GetExecutingAssembly
完美无缺,直到我从我的解决方案中取出dll。之后,BuildDate
始终是实用程序DLL的最后构建日期,而不是网站的dll。
namespace Web.BaseObjects
{
public abstract class Global : HttpApplication
{
/// <summary>
/// Gets the last build date of the website
/// </summary>
/// <remarks>This is the last write time of the website</remarks>
/// <returns></returns>
public DateTime BuildDate
{
get
{
// OLD (was also static)
//return File.GetLastWriteTime(
// System.Reflection.Assembly.GetExecutingAssembly.Location);
return File.GetLastWriteTime(
System.Reflection.Assembly.GetAssembly(this.GetType()).Location);
}
}
}
}
答案 0 :(得分:7)
使用GetType()
方法。它是虚拟的,所以它会表现多态。
Type WhatAmI {
get { return this.GetType(); }
}
答案 1 :(得分:2)
看起来你只是想要获得上述两种答案都能提供的类型。从您提出问题的方式来看,我希望Monster没有任何依赖于吸血鬼的代码。这听起来像是违反Dependency Inversion Principle的一个例子,并导致更脆弱的代码。
答案 2 :(得分:0)
您不需要Monster.WhatIAm属性。 C#有“是”运算符。
答案 3 :(得分:0)
您还可以使用以下代码段直接从继承的类(Vampire
)获取基类信息:
Type type = this.GetType();
Console.WriteLine("\tBase class = " + type.BaseType.FullName);