CSharp Application commonly used terms

There are few terms being used when you deal with project development with Microsoft .Net technology. If you are a Team Lead or a senior developer or simply a beginner you may want to know about these terms which are extensively being used when working on project of .Net.

Application - refers to an assembly that has an entry point . When an application is run, a new application domain is created. Several different instantiations of an application can exist on the same machine at the same time, and each has its own application domain.

Application vs. program

Note that an application is just an assembly with an entry point, and an application may be used as a class library by another application. Common usage often has the terms application and program interchangeable, but there is a defined difference in C#; see the definition of program in the following text.

Application domain - an entity that enables application isolation by acting as a container for application state. An application domain acts as a container and boundary for the types defined in the application and the class libraries it uses. Types loaded into one application domain are distinct from the same type loaded into another application domain, and instances of objects are not directly shared between application domains. For instance, each application domain has its own copy of static variables for these types, and a static constructor for a type is run at most once per application domain.

Implementations are free to provide implementation-specific policy or mechanisms for the creation and destruction of application domains.

Argument - an expression in the comma-separated list bounded by the parentheses in a method or instance constructor call expression or bounded by the square brackets in an element access expression. It is also known as an actual argument.

Assembly - refers to one or more files that are output by the compiler as a result of program compilation. An assembly is a configured set of loadable code modules and other resources that together implement a unit of functionality. An assembly can contain types, the executable code used to implement these types, and references to other assemblies. The physical representation of an assembly is not defined by this specification. Essentially, an assembly is the output of the compiler.

Assembly vs. class files

It is interesting to compare the granularity of Java and C# compiler outputs. A C# compiler will probably emit an assembly, a Java compiler a collection of class files. This emphasizes an important C# design goal-to support components rather than individual types.

Behavior - external appearance or action.

Behavior, implementation-defined - unspecified behavior where each implementation documents how the choice is made.

Behavior, undefined - behavior, upon use of a non-portable or erroneous construct or of erroneous data, for which this International Standard imposes no requirements. [Possible handling of undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message)].

Behavior, unspecified - behavior where this International Standard provides two or more possibilities and imposes no further requirements on which is chosen in any instance.

Class library - refers to an assembly that can be used by other assemblies. Use of a class library does not cause the creation of a new application domain. Instead, a class library is loaded into the application domain that uses it. For instance, when an application uses a class library, that class library is loaded into the application domain for that application. If an application uses a class library A that itself uses a class library B, then both A and B are loaded into the application domain for the application.

Accessing class libraries

The mechanism by which class libraries are made available to the current compilation is not defined by this specification.

Diagnostic message - a message belonging to an implementation-defined subset of the implementation's output messages.

Error, compile-time - an error reported during program translation.

Exception - an error condition that is outside the ordinary expected behavior.

Implementation - particular set of software (running in a particular translation environment under particular control options) that performs translation of programs for, and supports execution of methods in, a particular execution environment.

Namespace - a logical organizational system that provides a way of presenting program elements that are exposed to other programs.

Parameter - a variable declared as part of a method, instance constructor, operator, or indexer definition, which acquires a value on entry to that function member. It is also known as a formal parameter.

Program - refers to one or more source files that are presented to the compiler. Essentially, a program is the input to the compiler.

Programs, assemblies, applications and class libraries

This definition of program differs from common usage. In C#, a program is just the input to the compiler. The output of the compiler is an assembly, which is either an application or a class library.

Program, valid - a C# program constructed according to the syntax rules and diagnosable semantic rules.

Program instantiation - the execution of an application.

Recommended practice - specification that is strongly recommended as being aligned with the intent of the standard, but that might be impractical for some implementations.

Source file - an ordered sequence of Unicode characters. Source files typically have a one-to one correspondence with files in a file system, but this correspondence is not required.

Unsafe code - code that is permitted to perform such lower-level operations as declaring and operating on pointers, performing conversions between pointers and integral types, and taking the address of variables. Such operations provide functionality such as permitting interfacing with the underlying operating system, accessing a memory-mapped device, or implementing a time-critical algorithm.

Warning, compile-time -
an informational message reported during program translation, that is intended to identify a potentially questionable usage of a program element.