5

我想知道在类之间传递上下文的最佳方式是什么。我应该使用ref参数还是简单地将上下文作为参数传递?最好是构造函数,但在静态方法的情况下,最好的方法是什么?即性能、安全性、设计等。将上下文作为参数传递是否会影响性能?如果在使用引用时不同的线程同时在上下文上工作,可能会发生冲突吗?

主文件

static void Main(string[] args)
{
    var context = new MyEntities();

    var myClass = new MyClass(context);
    myClass.AddPerson();
    // or
    Person.AddPerson(ref context);
}

我的类.cs

public class MyClass
{
    public void MyClass(MyEntities context) { }

    public void AddPerson()
    {
        context.People.AddObject(new Person());
    }
}

MySecondClass.cs

public partial class Person
{
    public static AddPerson(ref MyEntities context)
    {
        // Do something
    }
}
4

2 回答 2

6

ref 关键字意味着您通过引用传递指针,因此更改变量的值将为调用者更改它。又名:

static void Main(string[] args)
{
    var context = new MyEntities();
    Person.AddPerson(ref context);

    // context is now null
}

调用:

public partial class Person
{
    public static AddPerson(ref MyEntities context)
    {
        context = null;
    }
}

在这种情况下,您不会通过引用传递。请记住,变量是指向对象的指针,因此简单地传递它不会像在 C++ 中那样制作对象的副本。

于 2013-04-22T18:53:57.000 回答
3

ref在这里完全不需要使用。在传递对象时,您实际上是在传递引用的副本(它本身就是一个指向堆中对象的值类型)。使用ref关键字,您通过引用传递“参考值”(感到困惑吗?)。这意味着实际上可以在函数范围之外更改引用,这在任何情况下似乎都不实际,并且只是出现奇怪错误的机会。

于 2013-04-22T19:13:47.207 回答