【发布时间】:2015-09-03 10:28:59
【问题描述】:
在下面的例子中调用实例方法RenderHelp是线程安全的吗?它调用Helper 类的静态方法,但不使用该类的任何静态变量。
如果 2 个或更多不同的 Helper 实例(每个都在不同的线程上运行)调用 RenderHelp,会曾经有问题吗?
public class Helper
{
public string ID { get; set; }
// other fields
static int[] Multiply(int[] a, int[] b)
{
if (a.Length == b.Length) return a.Zip(b, (a1, b2) => a1 * b2).ToArray();
else return null;
}
static int[] Add(int[] a, int[] b)
{
if (a.Length == b.Length) return a.Zip(b, (a1, b2) => a1 + b2).ToArray();
else return null;
}
public int[] RenderHelp(string help, int[]a, int[] b)
{
if (help == "Add".ToLower()) { return Add(a,b); }
else if (help == "Multiply".ToLower()) { return Multiply(a,b); }
else return null;
}
}
非常感谢相关 MSDN 或其他文档的链接。谢谢。
*另外为什么stackoverflow不能像上面那样正确格式化get?
【问题讨论】:
-
一个方法无法分辨谁在调用它。因此,调用者是静态的还是实例的都没有区别。它不会影响任何事情。
-
但是实例方法属于实例对象。不是在创建实例对象时制作的副本吗?
-
听起来你应该学习一些 C# 基础知识。在不了解您的语言的基本操作原理的情况下进行编程是很危险的。 Stack Overflow 也是解决初学者问题的好地方,请随时提问。
-
@AAA - 创建实例时不复制实例方法。创建的只是类的字段/属性。
-
抱歉,我的意思是一个对实例进行操作,而另一个属于该类。但你明白我的问题吗?我注意到在 stackoverflow 上的大多数其他类似问题都使用在不同线程上调用的静态类的静态方法。这里我们有一个非静态类,其中一个静态方法在不同的线程上被调用
标签: c# .net multithreading c#-4.0 thread-safety