“this"指的对象实际上并不是使用“this”的对象
本文关键字:对象 this 并不是 实际上 quot | 更新日期: 2023-09-27 18:17:32
在调试时,我的程序崩溃了,错误指出存在一个空引用。奇怪的是,在它崩溃的那一行,它在一个不同的静态类中运行一个方法,其中一个参数填充了"this",这应该意味着它正在喂养正在进行调用的对象,但是当我将鼠标悬停在"this"上时,它不是调用对象,而是一个完全不同的类类型的对象。
有没有人知道或有任何形式的解释,如何使用"this"可能有"this"是一个对象,甚至不是同一类型的调用类?
这就是所讨论的方法。
public void UpdateLight()
{ DoUpdateLight(); }
protected virtual void DoUpdateLight()
{
if (isActive)
{
Systems.Lighting.Instance.SetSpotLight(
this,
(int)(owner.GetEyeHeight - owner.GetHeight * 0.25f),
lightRange,
owner.visionAngleHorizontal,
owner.visionAngleVertical,
owner.GetGridNumber,
owner.parentFloor.floorLevel,
lightStrength,
lightDecay,
lightMaxTiles,
800);
RemoveLights();
litObjectsPrev = litObjects;
litObjects = new List<ILightable>();
}
}
回答你的问题:
有没有人知道或有任何形式的解释,如何使用"this"可能有"this"是一个对象,甚至不是同一类型的调用类?
是的。this
不一定是类本身。这可能是因为遗传。这意味着this
的类型实际上是它的子类型。
考虑运行下面的代码片段(控制台应用程序):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace thisSample
{
class Program
{
static void Main(string[] args)
{
BaseClass b = getClass("Child");
b.SayHelloAndMyType();
}
static BaseClass getClass(string name)
{
BaseClass returnValue = null;
switch (name)
{
case "Base":
returnValue = new BaseClass();
break;
case "Child":
returnValue = new ChildClass();
break;
default:
returnValue = new BaseClass();
break;
}
return returnValue;
}
}
class BaseClass
{
private const string NAME = "Base class";
public virtual string GetName()
{
return NAME;
}
public virtual void SayHelloAndMyType()
{
Console.WriteLine("Hello from " + this.GetName() + " and my type is " + this.GetType().ToString()); //this.GetName() could be "Base class" or not. Depending on what instance it really is "this" (Base or Child)
}
}
class ChildClass : BaseClass
{
private const string NAME = "Child class";
public override string GetName()
{
return NAME;
}
}
}
现在,至于为什么你的应用程序崩溃,因为NullReferenceException,它只能回答,如果有一个堆栈跟踪,在哪里抛出的异常