我设计了一个库类(Foo
),我需要使用这个类,如:
class Bar
{
Foo foo;
public Bar()
{
foo = new Foo();
...
}
...
}
如果我在课程下创建foo
对象:
class Bar
{
Foo foo = new Foo();
public Bar()
{
...
}
...
}
然后我的Bar
应用程序(认为这是一个Windows Form
应用程序)无论如何都可以正常工作,但是当出现特定情况时它会引发异常(Cross-thread operation not valid
例外情况在我的实例中)。
所以我警告我的伙伴这个用法提示:“你必须在应用程序的构造函数中初始化你的Foo
类型对象。”
有没有办法在Foo
类中添加一个能够保存用户记住此规则的代码,如果来自Foo
的对象未在Bar
中初始化,则会使编译器抛出异常的构造函数?
虽然不太了解C#,但我需要将dcs library移植到C#中,这是over here
当我尝试在另一个线程中设置GUI对象的变量时,我遇到了that问题。所以我需要以某种方式同步它们,因为我问here并找到了正确答案here。
所以我的应用程序以我想要的方式工作,而完全正常的示例应用程序是here。
但是,如果我在类定义下初始化foo
变量(如第一个示例中所示),SynchronizationContext.Current
变量引用Bar
应用程序自己的{{1}中的其他内容。变量。这就是为什么,当事情发生时(do not ask what it is)
这就是为什么,而不是警告用户并强迫他们记住他们必须初始化他们想要使用的类'构造函数中的SynchronizationContext.Current
对象,我正在寻找一种方法来通过添加一些东西来按需警告他们在foo
班。
答案 0 :(得分:0)
我不太确定你的问题是什么,但是你不能只使用延迟加载的属性然后调用它的位置并不重要:
public class A {
@NotNull private String name;
public static void main(String[] args) {
A a = new A();
a.name = null;
}
}
然后第一次调用它然后它将被实例化。
答案 1 :(得分:0)
有没有办法让编译器抛出异常......
否,导致两种初始化类型都有效。但是你可以创建自己的Exception类型,如果没有在
之类的构造函数中初始化则抛出它class Bar
{
Foo foo = null;
public void Bar()
{
if(foo == null)
{
foo = new Foo();
}
else
{
throw new Exception("foo not initialized in constructor");
...
}
仅抛出编译器错误的其他方法是使用code analysis rule
。您可以为此创建FxCop
规则,并应用在失败时抛出构建错误的规则。