c#中泛型类构造函数重载赋值时为啥不接受null?对其赋空值应给怎么做?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中泛型类构造函数重载赋值时为啥不接受null?对其赋空值应给怎么做?相关的知识,希望对你有一定的参考价值。

public Node() : this(null, null)

参考技术A public Node(T data, Node<T> next)

this.data = data;
this.next = next;


修改为
//参数为可空类型
public Node(T? data, Node<T>? next)

this.data = data;
this.next = next;
追问

它说 无法将T?类型转换成T类型

追答

public Node(data as T, next as Node)

this.data = data;
this.next = next;

参考技术B 不明不白,类没提供出来,调用的构造又是哪个?希望提供详细类与及类构造函数.追问

class Node

private T data get;set;
private Node next get; set;
//public Node() : this(null, null)
public Node(T data, Node next)

this.data = data;
this.next = next;

追答

哦,T不支持null参数,它是非空的.空的,对整个类没有意义了呀.

追问

那初始值怎么给啊?

追答

你这个类本来就是一个未知类,它的初始化本来就是要一个类,但你又想它初始化,但又不给它初始的类,这个是没有意义的.看你的意图是什么可以做适当的修改的.

追问

这是单链表里的节点类,还有一个单链表类singlelinkedlist(带头节点的),实现对单链表的插入删除等等一系列操作。头结点的data没法初始化,怎么改好呢?

追答

不明白你是要空构造还是带参构造.

追问

带参构造

追答

你的构造函数名写错了,那个是泛型的应该加。这样你就可以实现带参的构造了。

本回答被提问者和网友采纳

c++ 拷贝构造函数与赋值运算符重载函数的区别是

复制构造函数接受单个类类型引用形参,这个形参一般用const修饰。
class A
public:
A();;
A(const A&);
//.........
;
一般的类,编译器合成的构造函数就能完成必要的工作。担当类有一个数据成员是指针,或者成员表示在构造函数中分配的其他资源;在创建新对象时必须做一些特定工作。这两种情况必须定义复制构造函数。

复制操作符重载,由operator后面跟所定义的操作符符号,通过定义名为operator=函数来对赋值进行定义。该操作符函数有两个形参:第一个形参对应左边的操作数(隐式绑定到this指针了),第二个形参对应右操作数。返回类型应该与内置赋值运算返回的类型相同,内置类型的赋值运算返回对右操作数的引用,赋值操作符也返回对同一类型的引用。
class B

public:
B& operator=(const B &);
;

可以使用合成复制构造函数的类通常也可以使用合成赋值操作符。一般来说,如果类需要复制构造函数,也就需要赋值操作符。

OK……
参考技术A 简单的来说是,拷贝构造函数是用一个已存在的对象去构造一个不存在的对象(拷贝构造函数毕竟还是构造函数嘛),也就是初始化一个对象。而赋值运算符重载函数是用一个存在的对象去给另一个已存在并初始化过(即已经过构造函数的初始化了)的对象进行赋值。 它们定义上的区别,楼上的已经说过了。

以上是关于c#中泛型类构造函数重载赋值时为啥不接受null?对其赋空值应给怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

C# 泛型类 构造方法中实例化T

为啥 C# (4.0) 不允许泛型类类型中的协变和逆变?

java中泛型List问题

java中啥叫泛型??

Java中的泛型的问题?

Java——泛型