Friday, September 26, 2008

ASP.NET5

15.What is the CTS?

CTS 3 Common Type System. This is the range of types that the .NET runtime understands, and

therefore that .NET applications can use. However note that not all .NET languages will

support all the types in the CTS. The CTS is a superset of the CLS. 

16.What is the CLS?

CLS 3 Common Language Specification. This is a subset of the CTS which all .NET languages are

expected to support. The idea is that any program which uses CLS-compliant types can interoperate

17.with any .NET program written in any language.

In theory this allows very tight interop between different .NET languages - for example allowing a

C# class to inherit from a VB class. 

18.What is IL?

IL 3 Intermediate Language. Also known as MSIL (Microsoft Intermediate Language) or CIL (Common

Intermediate Language). All .NET source code (of any language) is compiled to IL. The IL is then

converted to machine code at the point where the software is installed, or at run-time by a

Just-In-Time (JIT) compiler. 

19.What does ‘managed‘ mean in the .NET context?

The term ‘managed‘ is the cause of much confusion. It is used in various places within .NET,

meaning slightly different things.Managed code: The .NET framework provides several core run- time

services to the programs that run within it - for example

exception handling and security. For these services to work, the code must provide a minimum level

of information to the runtime.

Such code is called managed code. All C# and Visual Basic.NET code is managed by default. VS7

C++ code is not managed by default, but the compiler can produce managed code by specifying a

command-line switch (/com+).

Managed data: This is data that is allocated and de-allocated by the .NET runtime‘s garbage

collector. C# and VB.NET data is always managed. VS7 C++ data is unmanaged by default, even when

using the /com+ switch, but it can be marked as managed using the    gc keyword.

Managed classes:

This is usually referred to in the context of Managed Extensions (ME) for C++. When using ME C++, a

class can be marked with the    gc keyword. As the name suggests, this means that the memory for

instances of the class is managed by the garbage collector, but it also means more than that. The

class becomes a fully paid-up member of the

.NET community with the benefits and restrictions that brings. An example of a benefit is proper

interop with classes written in other languages - for example, a managed C++ class can inherit from

a VB class. An example of a restriction is that a managed class can only inherit from one base

class. 

20.What is reflection?

All .NET compilers produce metadata about the types defined in the modules they produce. This

metadata is packaged along with the module (modules in turn are packaged together in assemblies),

and can be accessed by a mechanism called reflection. The System.Reflection namespace contains

classes that can be used to interrogate the types for a module/assembly. Using reflection to access

.NET metadata is very similar to using ITypeLib/ITypeInfo to access type library data in COM, and

it is used for similar purposes - e.g. determining data type sizes for marshaling data across

context/process/machine boundaries.

Reflection can also be used to dynamically invoke methods (see System.Type.InvokeMember ) , or even

create types dynamically at run-time (see System.Reflection.Emit.TypeBuilder).

 

21.What is the difference between Finalize and Dispose (Garbage collection) ?

Class instances often encapsulate control over resources that are not managed by the runtime, such

as window handles (HWND), database connections, and so on. Therefore, you should provide both an

explicit and an implicit way to free those resources. Provide implicit control by implementing the

protected Finalize Method on an object (destructor syntax in C# and the Managed Extensions for

C++). The garbage collector calls this method at some point after there are no longer any valid

references to the object. In some cases, you might want to provide programmers using an object with

the ability to explicitly release these external resources before the garbage collector frees the

object. If an external resource is scarce or expensive, better performance can be achieved if the

programmer explicitly releases resources when they are no longer being used. To provide explicit

control, implement the Dispose method provided by the IDisposable Interface. The consumer of the

object should call this method when it is

done using the object.

Dispose can be called even if other references to the object are alive. Note that even when you

provide explicit control by way of Dispose, you should provide implicit cleanup using the

Finalize method. Finalize provides a backup to prevent resources from

Permanently leaking if the programmer fails to call Dispose. 

22.What is Partial Assembly References?

Full Assembly reference: A full assembly reference includes the assembly‘s text name, version,

culture, and public key token (if the assembly has a strong name). A full assembly reference is

required if you reference any assembly that is part of the common

Language runtime or any assembly located in the global assembly cache. 

Partial Assembly reference: We can dynamically reference an assembly by providing  only partial

information, such as specifying only the assembly name. When you specify a partial assembly

reference, the runtime looks for the assembly only in the application

Directory.

We can make partial references to an assembly in your code one of the following ways:

-> Use a method such as System.Reflection.Assembly.Load and specify only a partial reference. The

runtime checks for the assembly in the application directory.

-> Use the System.Reflection.Assembly.LoadWithPartialName method and specify only a partial

reference. The runtime checks for the assembly in the application directory and in the global

assembly cache

No comments: