C# Frequently Asked Questions
Please click on the questions to see the answers
Object class (System.Object) is the base class of .NET Classes
The Main method is the execution entry point of C# console application.
You need an entry point into your program. A static method can be called without instantiating an object. Therefore main() needs to be static in order to allow it to be the entry to your program.
The parameter of the Main method is a String array that represents the command-line arguments. The string args may contain any number of Command line arguments which we want to pass to Main() method.
By default in .Net, you don't pass objects by reference. You pass references to objects by value. However, you get the illusion it's pass by reference, because when you pass a reference type you get a copy of the reference (the reference was passed by value).
Nullable type is new concept introduced in C#2.0 which allow user to assign null value to primitive data types of C# language. It is important to note that Nullable type is Structure type.
Upcasting is an operation that creates a base class reference from a subclass reference. (subclass -> superclass) (i.e. Manager -> Employee)
Downcasting is an operation that creates a subclass reference from a base class reference. (superclass -> subclass) (i.e. Employee -> Manager)
Managed code is not directly compiled to machine code but to an intermediate language which is interpreted and executed by some service on a machine and is therefore operating within a secure framework which handles things like memory and threads for you.
Unmanaged code is compiled directly to machine code and therefore executed by the OS directly. So, it has the ability to do damaging/powerful things Managed code does not.
C# is managed code because Common language runtime can compile C# code to Intermediate language.
No. You can't override a static method. A static method can't be virtual, since it's not related to an instance of the class.
Yes. You have to create an instance of that class within the static method and then call it, but you ensure there is only one instance.
Namespaces are containers for the classes. Namespaces are using for grouping the related classes in C#. "Using" keyword can be used for using the namespace in other namespace.
It is the modulo (or modulus) operator. The modulus operator (%) computes the remainder after dividing its first operand by its second.
The array which has elements of type array is called jagged array. The elements can be of different dimensions and sizes. We can also call jagged array as Array of arrays.
Break statement: If a particular condition is satisfied then break statement exits you out from a particular loop or switch case etc.
Continue statement: When the continue statement is encountered in a code, all the actions up till this statement are executed again without execution of any statement after the continue statement.
The if statement is used to select among two alternatives only. It uses a boolean expression to decide which alternative should be executed. While the switch statement is used to select among multiple alternatives. It uses an int expression to determine which alternative should be executed.
Prefix: increments the current value and then passes it to the function.
Above code return 11 because the value of i is incremented, and the value of the expression is the new value of i.Postfix: passes the current value of i to the function and then increments it.
Above code return 20 because the value of i is incremented, but the value of the expression is the original value of i
No, because they are not accessible outside the class.
No , because Array is type safe.
If you want to store different types, use:
Multicast delegate is an extension of normal delegate. It helps you to point more than one method at a single moment of time
It is not possible in C#, use interfaces instead.
Interface is like a blueprint of any class, where you declare your members. Any class that implement that interface is responsible for its definition. Having private or protected members in an interface doesn't make sense conceptually. Only public members matter to the code consuming the interface. The public access specifier indicates that the interface can be used by any class in any package.
In the CLI specification, a constructor is mandatory for non-static classes, so at least a default constructor will be generated by the compiler if you don't specify another constructor. So the default constructor will be supplied by the C# Compiler for you.
C# destructors are special methods that contains clean up code for the object. You cannot call them explicitly in your code as they are called implicitly by GC. In C# they have same name as the class name preceded by the ~ sign.
In C#, a structure is a value type data type. It helps you to make a single variable hold related data of various data types. The struct keyword is used for creating a structure.
The Debug and Trace classes have very similar methods. The primary difference is that calls to the Debug class are typically only included in Debug build and Trace are included in all builds (Debug and Release).
The "==" compares object references and .Equals method compares object content
Yes, you can. There is no requirement that abstract classes must have abstract methods. An Abstract class means the definition of the class is not complete and hence cannot be instantiated.
You can't define static members on an interface in C#. An interface is a contract, not an implementation.
No. Because this points to an instance of the class, in the static method you don't have an instance.