A technology stack is basically a bunch of software that works together at the same time. They help to achieve a specific goal.
While the .NET architecture guarantees language compatibility between applications and within applications, there are some rules to follow. They are carried out when developing applications to achieve this capability. And the point here is not in the limitations of .NET capabilities, but in fundamental difficulties. For example, what if one programming language supports unsigned data types (Delphi, C ++) and the other (Java) does not? What if one compiler allows overloaded methods and the other does not? What should be the MSIL code in such cases with outsource net development by dataxdev?
As you can see, there are objective difficulties, and a number of specifications are included in the .NET architecture to overcome them.
.NET introduces the logical concept of a namespace that serves to identify types in shared libraries and applications.
Applications should use the Common Type System. They combine the data and operation types found in most programming languages.
When writing the source code of applications, it is necessary to be guided by some rules. They are combined under the name of the Common Language Specification.
Because metadata is included in the code of .NET applications, it is possible to add information about the types used to applications. They help to check the security and compatibility of the code. This is part of the concept of .NET managed code. Let’s consider the listed solutions in more detail.
.NET uses namespaces. A namespace is a logical structure that includes other namespaces and types. Its main purpose is type identification (in .NET, a type means both classes and interfaces) and prevention of type naming conflicts. Namespaces can be standard or developer-generated.
Types are named using only namespace names. For example, there is a standard namespace System.IO, which combines types that are responsible for performing file I / O operations. As you can see from the view, the IO namespace is part of the global System. Using the operators of the programming language used, you can add functions of a particular namespace to an application. The concept is somewhat similar to Delphi modules for Win32.
If a new type needs to be defined, this must be done within the appropriate namespace. For example, you can define a type for storing XML file names for I / O operations, and then accessing it in a .NET application would look like this: System.IO.XMLFileName.
Types of the same name are allowed in different namespaces. The collection of .NET namespaces has a hierarchical structure, at the top of which is the System. The global System namespace encompasses all the basic operations and types that exist in .NET and must be implemented in all development environments and programming languages for .NET. The namespaces included in it combine operations in the main areas of application functioning of technology stack for web applications.
A complete list of base namespaces can be found in the MSDN documentation.
General type system
The Common Type System (CTS) is a specification that brings together all the types and operations available in .NET applications. It is developed by analyzing the major high-level programming languages used in .NET and is part of the CLR runtime that verifies code through CTS and ensures application execution security.
Within the framework of the CTS, several important types are defined, their description and conditions of use are given. All types are divided into two large groups. One is made up of value types. They always contain data. The second group is made up of reference types, which store references to memory regions. Depending on the contents of the memory area, the reference type can be a class, interface, array, etc.
For an application (or a portion of it) to be correctly interpreted by other applications written in another programming language. It must be designed with the Common Language Specification (CLS) rules in mind. CLS is a set of rules and constraints that provide full integration of codes created in different development environments and in different programming languages. The program code, created taking into account the rules of interlanguage interaction, is called CLS-compliant.
When developing common applications, knowledge of CLS rules is not required. Or is required in general terms in order to write more efficient code. The compiler takes over all the work of enforcing the CLS rules. But if you are working on an API that will be used in other applications, or your assemblies will be used by others, then knowledge of the CLS is necessary.