繁体   English   中英

C#创建类实例语法?

[英]C# creating class instance syntax?

我对编码还很陌生,总是使用“ classname instancename = new classname()”创建实例,但是今天我发现以下代码无法使用,因此无法使用此语法。 我的问题是第五行会发生什么。 非常感谢你。

private void _InsertIntoBinarySearchTree(ref Element<K> p , K key)
{
    if (p == null)
    {
        p = new Element<K>();//what happens here?
        p.key = key;
    }
    else
    {
        if (p.key.CompareTo(key) > 0)
        {
            _InsertIntoBinarySearchTree(ref p.left, key);
        }
        else if (p.key.CompareTo(key) < 0)
        {
            _InsertIntoBinarySearchTree(ref p.right, key);
        }
        else
        {
            throw new Exception("");
        }
    }
}

p如果通过方法中的ref进行操作,则您所做的任何事情都会在方法之外受到影响; 这意味着当您为它分配newp ,方法参数p的调用者也会被重新分配。

您要说明它是参数中的Element<K>类型,因此p必须符合该类型。

在有问题的方法行中,您可以通过以下方式将p重新分配给new Element<K>

p = new Element<K>();//what happens here?

就如何使用它而言,它与p = new Element()相同,但是由于Element类型需要通用类型引用(可以是K或其他任何值),因此您还需要使用相同的方式重新分配它类型K传递给该方法。 因为我们不确定何时调用K类型。

您不使用var p =...Element<K> p =..的原因是因为参数中已经将p声明为该类型。 这是一个ref参数,因此您可以按照所述重新分配它。

该方法的调用者可能仅作为示例是这样的:

Element<string> p = null;
string k = "someKey";
_InsertIntoBinarySearchTree(ref p, k); //Here p goes into the method as ref; the method performs the null check and sets p as new Element<string>()

希望这可以帮助...

首先,您不能为变量p使用类型说明符,因为您没有声明新变量p ,而是为现有变量分配了一个值。 也可以看看:

int myVal;
myVal = 5;

其次,好吧,您要分配给变量p 因此,它将使用新值(在本例中为new Element<K>()覆盖之前的任何内容。 从技术上讲,它可以是任何值,但是由于您调用了new ,所以它将创建一个新变量并调用适当的构造函数。 不必担心内存泄漏-C#将跟踪孤立的引用并为您清理它们。

最后,由于p是作为ref传递到您的方法的,因此将其赋值将在方法的本地范围内编辑变量p以及从调用范围传递给您的方法的引用,因此为什么将p用作在这里输出。

您会注意到第一行的方法签名中p变量的类是Element<K> 暂时忽略ref传递的代码,它类似于以下代码。

Element<K> p = new Element<K>();

元素是类型K的泛型类。K是要排序的对象的类型。 之所以通用,是因为您可以选择要排序的元素的类型。 因此,例如,如果您要对汽车进行分类。

Element<Car> c = new Element<Car>();

在通用Element<K>类的定义内定义了允许哪种类型的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM