C# 从静态类触发非静态类?
我正在用C#编写一个类库(API)。该类是非静态的,包含多个公共事件。是否可以从单独类中的静态方法触发这些事件? 例如C# 从静态类触发非静态类?,c#,events,static,parent-child,non-static,C#,Events,Static,Parent Child,Non Static,我正在用C#编写一个类库(API)。该类是非静态的,包含多个公共事件。是否可以从单独类中的静态方法触发这些事件? 例如 class nonStaticDLLCLASS { public event Event1; public CallStaticMethod() { StaticTestClass.GoStaticMethod(); } } class StaticTestClass { public static GoStaticMethod()
class nonStaticDLLCLASS
{
public event Event1;
public CallStaticMethod()
{
StaticTestClass.GoStaticMethod();
}
}
class StaticTestClass
{
public static GoStaticMethod()
{
// Here I want to fire Event1 in the nonStaticDLLCLASS
// I know the following line is not correct but can I do something like that?
(nonStaticDLLCLASS)StaticTestClass.ObjectThatCalledMe.Event1();
}
}
我知道为了访问非静态类的方法,您通常必须创建一个非静态类的实例,但在这种情况下,实例已经被创建,而不是由试图访问它的类创建的 否,只能在该类型的有效实例上调用/访问实例成员 为了使其工作,您必须将
nonStaticDLLCLASS
的实例传递给StaticTestClass.GoStaticMethod
,并使用该实例引用调用/访问非静态成员
在上面的示例中,如何指定要访问的类型的实例?静态方法不知道任何实例,所以它如何知道使用哪个实例,或者内存中是否加载了实例
考虑这个例子:
using System;
class Dog
{
public String Name { get; set; }
}
class Example
{
static void Main()
{
Dog rex = new Dog { Name="Rex" };
Dog fluffy = new Dog { Name="Fluffy" };
}
static void sayHiToDog()
{
// In this static method how can I specify which dog instance
// I mean to access without a valid instance? It is impossible since
// the static method knows nothing about the instances that have been
// created in the static method above.
}
static void sayHiToDog(Dog dog)
{
// Now this method would work since I now have an instance of the
// Dog type that I can say hi to.
Console.WriteLine("Hello, " + dog.Name);
}
}
只能对实例调用实例方法。在您的示例中,实例正在调用静态方法。您能为静态方法提供一个参数,允许实例传入对自身的引用吗?大概是这样的:
class nonStaticDLLCLASS
{
public event Event1;
public CallStaticMethod()
{
StaticTestClass.GoStaticMethod(this);
}
}
class StaticTestClass
{
public static GoStaticMethod(nonStaticDLLCLASS instance)
{
// Here I want to fire Event1 in the nonStaticDLLCLASS
// I know the following line is not correct but can I do something like that?
instance.Event1();
}
}
我认为您需要澄清您的问题,以说明为什么您不能这样做,或者为什么实例不能引发自己的事件。这很有意义。我觉得我的大脑不能正常工作!