Home PC Games Linux Windows Database Network Programming Server Mobile  
  Home \ Programming \ C # Future: Tracking null reference     - Linux System Getting Started Learning: Disable Ubuntu Apport internal error reporting procedures (Linux)

- Installation on the way to the root source Ubuntu Server 14.04 LTS version Odoo8.0 (Server)

- How to use Xmanager Remote Desktop and VNC Log (Linux)

- CentOS 6.4 under PXE + Kickstart unattended operating system installation (Programming)

- How to create a binary distribution with Bash (Linux)

- Linux_Logo - output color ANSI Linux distributions logo command-line tool (Linux)

- Installation Strongswan: on a Linux IPsec-based VPN tool (Linux)

- Linux system security check method (Linux)

- Sshuttle A VPN-based transparent proxy that uses ssh (Server)

- How to Upgrade Ubuntu GNOME 14.10 to GNOME 3.16 Desktop (Linux)

- Oracle 11g RAC automatically play GI PSU patch ( (Database)

- Ubuntu users to install voice switch instructs the applet (Linux)

- jQuery get value drop-down list and select text (Programming)

- Java synchronization mechanism: synchronized, wait, notify (Programming)

- Oracle Bug caused by the collection of AWR Snapshot fault (Database)

- Linux iptables firewall settings to use (Linux)

- Linux novice common commands (Linux)

- CentOS7 virtual machine settings, and bridging problems (Linux)

- CentOS install pip (Linux)

- Redis-- persistence articles (Database)

  C # Future: Tracking null reference
  Add Date : 2018-11-21      
  In .NET the most common types of errors probably the number of null reference exception. This error is rooted in C # can not express the concept of non-null reference, which also leads to allow the compiler to force a blank check into an overly burdensome task.

To address this problem, a proposal shall recommend the use of a mandatory reference, and define a clear reference may be empty. In the proposal, you can use null reference? Suffixes are defined as nullable value types are defined the same way. Compulsory reference, or non-null reference will use the! Suffix definitions.

Enforces referential and a null reference should be viewed as a concept limited to the language itself, they just changed the behavior of the compiler, but does not change the generated IL code.

Before the compiler allows access to any method or property can be null reference object, you must explicitly check the null reference. And the transition to a null reference can enforce referential before, must also be null reference checks.

The compiler enforces referential need to confirm the value contained therein is not empty. Since this rule is limited to one kind of compiler can not be guaranteed in the reverse sequence and so the scene can be similarly effective.

After reading the full content of this proposal, you will notice a term which refers to the "general reference." It refers to C # in general reference is neither mandatory nor clearly defined as empty. Since this reference is treated as legacy code, so you can tell the compiler by AllowGeneralReferences This attribute is generally referenced in the code are not allowed.

When combined with the implicit variable definition can be used in the var keyword! Or? suffix.

Type Conversion

According to this proposal, you can implicitly converted to a mandatory reference to a null reference. However, it does not allow you to convert a generic reference to a null reference, which has the following explanation:

Hypothetically this general reference to the intention (perhaps it is conceptually should be mandatory, rather than a concept may be empty).

But this argument is no reason, if a reference to the actual enforcement can be implicitly converted to a null reference, then a "conceptual enforces referential" should be able to achieve this conversion.

Similarly is from enforces referential null reference or converted to general reference is not allowed, which is based on the same grounds, although the reason there are some doubts.


The proposal for a non-null reference type, there are still a problem to be solved, it is difficult to enforce this non-emptiness in the constructor. In this regard, a proposal is not to deal with this problem. Many times as we can be in the constructor for a "read-only" field assignment, we can declare this rule does not take effect in the constructor, the need to develop himself noticed.

At first glance, this proposal it would be counter-productive, but it is actually very reasonable. Developers are already in the constructor may need to pay attention to access uninitialized field would bring problems. This is a proposal does not change this phenomenon, if developers ignore this, then the constructor will generate an error, which would reduce the risk of a null reference exception occurs.

Mixed legacy code and new code

Non-null reference this proposal also need to face another problem, that is how to deal with legacy code. For example, if you have upgraded to the base class library, in which the use of this new syntax. The existing application code changes may not be possible immediately, then there must be some mechanism to turn off the use of this new syntax. This proposal provides a IgnoreNewStyleReferences property, it can refer to a new centralized external program uses the syntax by ignoring it.

More details about available null reference

In the foregoing, we can mention a null reference may be in one of two states: unknown or determined non-null (Note: You may also judged to be empty). This is further illustrated this proposal, if a reference has been determined to be empty, then after the code can not use it (assigned to another variable may be empty), developers must use a hard-coded null, which also It allows intent of the code shown even more clearly.

Other issues

This proposal there are many issues need to be addressed. For example, whether to define mandatory reference array? When using reflection of how exposure to enforce referential and non-null reference? How to turn the interaction between them and generics?
- PL / SQL data types (Database)
- Java implementation chain store binary tree (Programming)
- Fedora 23 How to install LAMP server (Server)
- Security experience: to see how the experts deal with DDoS attacks (Linux)
- Installation Elementary OS Freya 20 things to do (Linux)
- Ubuntu install driver manager Mint Driver Manager and Device Driver Manager (Linux)
- Shell script to crawl through AWR SQL Report Problems (Database)
- Android Application Development: an argument between Activity (Programming)
- A key installation Gitlab 7 on RHEL6.4 and Setup Mail TX (Linux)
- How to Install Sticky Notes on Ubuntu and Derivatives (Linux)
- How to modify the Sublime in Tab four spaces (Linux)
- Linux install and configure Heartbeat (Server)
- Getting Started Linux Shell Scripting (Programming)
- How to use the TF / SD card making Exynos 4412 u-boot boot disk in Ubuntu (Linux)
- OpenWrt modify flash size (Linux)
- C # / iOS / Android Universal Encryption and decryption (Programming)
- 5 fast Node.js application performance tips (Programming)
- Let CentOS6 yum upgrade to support more source rpm package (Linux)
- Ten minutes to find out the character set and character encoding (Linux)
- RabbitMQ tutorial examples: the Hello RabbitMQ World Java realization (Linux)
  CopyRight 2002-2022 newfreesoft.com, All Rights Reserved.