C# 在C中使用泛型委托时出现问题#
我有一个示例程序,其中有一个名为C# 在C中使用泛型委托时出现问题#,c#,C#,我有一个示例程序,其中有一个名为ObserverTest的类,其中有两个方法 一个用于订阅,一个用于通知任何类型的T,但我得到了一些构建错误 以下是我的示例代码> using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ObserverTest obs = ObserverTest.Instance();
ObserverTest
的类,其中有两个方法
一个用于订阅,一个用于通知任何类型的T,但我得到了一些构建错误
以下是我的示例代码>
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ObserverTest obs = ObserverTest.Instance();
obs.SubscribeToChange<int>(GotChange);
obs.NotifyChange<int>(200);
Console.ReadLine();
}
private static void GotChange(int val)
{
Console.WriteLine(string.Format("Changed value is {0}", val));
}
}
public class ObserverTest
{
private static ObserverTest _obsTest;
private Action<T> _observer;
private ObserverTest()
{
}
public static ObserverTest Instance()
{
return _obsTest = _obsTest == null ? new ObserverTest() : _obsTest;
}
public void NotifyChange<T>(T val)
{
_observer(val);
}
public void SubscribeToChange<T>(Action<T> observer)
{
_observer = observer;
}
}
}
有人能帮我删除错误吗
提前感谢。尝试在类定义中添加泛型:
public class ObserverTest<T>
公共类observer测试
完整代码:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ObserverTest<int> obs = ObserverTest<int>.Instance();
obs.SubscribeToChange<int>(GotChange);
obs.NotifyChange<int>(200);
Console.ReadLine();
}
private static void GotChange(int val)
{
Console.WriteLine(string.Format("Changed value is {0}", val));
}
}
public class ObserverTest<T>
{
private static ObserverTest<T> _obsTest;
private Action<T> _observer;
private ObserverTest()
{
}
public static ObserverTest<T> Instance()
{
return _obsTest = _obsTest == null ? new ObserverTest<T>() : _obsTest;
}
public void NotifyChange<E>(T val)
{
_observer(val);
}
public void SubscribeToChange<E>(Action<T> observer)
{
_observer = observer;
}
}
}
使用系统;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
ObserverTest obs=ObserverTest.Instance();
obs.SubscribeToChange(GotChange);
obs.NotifyChange(200);
Console.ReadLine();
}
私有静态void GotChange(int val)
{
WriteLine(string.Format(“更改的值为{0}”,val));
}
}
公共类观察者测试
{
专用静态ObserverTest\u ObserverTest;
私人行动观察员;
私有observer测试()
{
}
公共静态ObserverTest实例()
{
返回_obsTest=_obsTest==null?新建ObserverTest():_obsTest;
}
公共变更(T val)
{
_观察员(val);
}
公共部门主管(行动观察员)
{
_观察者=观察者;
}
}
}
尝试在类定义中添加泛型:
public class ObserverTest<T>
公共类observer测试
完整代码:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ObserverTest<int> obs = ObserverTest<int>.Instance();
obs.SubscribeToChange<int>(GotChange);
obs.NotifyChange<int>(200);
Console.ReadLine();
}
private static void GotChange(int val)
{
Console.WriteLine(string.Format("Changed value is {0}", val));
}
}
public class ObserverTest<T>
{
private static ObserverTest<T> _obsTest;
private Action<T> _observer;
private ObserverTest()
{
}
public static ObserverTest<T> Instance()
{
return _obsTest = _obsTest == null ? new ObserverTest<T>() : _obsTest;
}
public void NotifyChange<E>(T val)
{
_observer(val);
}
public void SubscribeToChange<E>(Action<T> observer)
{
_observer = observer;
}
}
}
使用系统;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
ObserverTest obs=ObserverTest.Instance();
obs.SubscribeToChange(GotChange);
obs.NotifyChange(200);
Console.ReadLine();
}
私有静态void GotChange(int val)
{
WriteLine(string.Format(“更改的值为{0}”,val));
}
}
公共类观察者测试
{
专用静态ObserverTest\u ObserverTest;
私人行动观察员;
私有observer测试()
{
}
公共静态ObserverTest实例()
{
返回_obsTest=_obsTest==null?新建ObserverTest():_obsTest;
}
公共变更(T val)
{
_观察员(val);
}
公共部门主管(行动观察员)
{
_观察者=观察者;
}
}
}
如果您有一个属于泛型的成员,如\u observer
,则需要在observer test
类上放置一个类型参数,如下所示:
public class ObserverTest<T> {
}
公共类observer测试{
}
当然,您还需要修改
实例
方法 如果您有一个属于泛型的成员,如\u observer
,则需要在observer test
类上放置一个类型参数,如下所示:
public class ObserverTest<T> {
}
公共类observer测试{
}
当然,您还需要修改
实例
方法 您遇到的问题是,您正在声明一个具有泛型类型的字段成员,而该类没有:
public class ObserverTest
{
private static ObserverTest _obsTest;
private Action<T> _observer;
...
}
您遇到的问题是,您正在声明一个具有泛型类型的字段成员,而该类没有:
public class ObserverTest
{
private static ObserverTest _obsTest;
private Action<T> _observer;
...
}
另外,请记住,您没有正确地实现单例模式。另外,请记住,您没有正确地实现单例模式。@myermian如果没有它,我的VS不会编译该项目。你自己试试,也许你会更幸运。因为你仍然在用一个泛型类型
NotifyChange(200)
打电话。您可以从调用中删除和泛型参数,因为您从未使用过E类型。@myermian我知道,但这不是我的代码,所以我将其留给作者。@myermian如果没有它,我的VS不会编译项目。你自己试试,也许你会更幸运。因为你仍然在用一个泛型类型NotifyChange(200)
打电话。您可以从调用中删除和泛型参数,因为您从未使用E类型。@myermian我知道,但这不是我的代码,所以我将此留给作者。