Friday, January 30, 2009

C# FAQs-2

1. Name 10 C# keywords.
abstract, event, new, struct, explicit, null, base, extern, object, this
2. What is public accessibility?
There are no access restrictions.
3. What is protected accessibility?
Access is restricted to types derived from the containing class.
4. What is internal accessibility?
A member marked internal is only accessible from files within the same assembly.
5. What is protected internal accessibility?
Access is restricted to types derived from the containing class or from files within the same assembly.
6. What is private accessibility?
Access is restricted to within the containing class.
7. What is the default accessibility for a class?
internal for a top level class, private for a nested one.
8. What is the default accessibility for members of an interface?
public
9. What is the default accessibility for members of a struct?
private
10. Can the members of an interface be private?
No.
11. Methods must declare a return type, what is the keyword used when nothing is returned from the method?
void
12. Class methods to should be marked with what keyword?
static
13. Write some code using interfaces, virtual methods, and an abstract class.
using System;

public interface Iexample1
{
int MyMethod1();
}

public interface Iexample2
{
int MyMethod2();
}

public abstract class ABSExample : Iexample1, Iexample2
{
public ABSExample()
{
System.Console.WriteLine("ABSExample constructor");
}

public int MyMethod1()
{
return 1;
}

public int MyMethod2()
{
return 2;
}

public abstract void MyABSMethod();
}

public class VIRTExample : ABSExample
{
public VIRTExample()
{
System.Console.WriteLine("VIRTExample constructor");
}

public override void MyABSMethod()
{
System.Console.WriteLine("Abstract method made concrete");
}

public virtual void VIRTMethod1()
{
System.Console.WriteLine("VIRTMethod1 has NOT been overridden");
}

public virtual void VIRTMethod2()
{
System.Console.WriteLine("VIRTMethod2 has NOT been overridden");
}
}

public class FinalClass : VIRTExample
{
public override void VIRTMethod2()
{
System.Console.WriteLine("VIRTMethod2 has been overridden");
}
}
14. A class can have many mains, how does this work?
Only one of them is run, that is the one marked (public) static, e.g:
public static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
}

private void Main(string[] args, int i)
{
}
15. Does an object need to be made to run main?
No
16. Write a hello world console application.
using System;

namespace Console1
{
class Class1
{
[STAThread] // No longer needed
static void Main(string[] args)
{
Console.WriteLine("Hello world");
}
}
}
17. What are the two return types for main?
void and int
18. What is a reference parameter?
Reference parameters reference the original object whereas value parameters make a local copy and do not affect the original. Some example code is shown:
using System;

namespace Console1
{
class Class1
{
static void Main(string[] args)
{
TestRef tr1 = new TestRef();
TestRef tr2 = new TestRef();

tr1.TestValue = "Original value";
tr2.TestValue = "Original value";
int tv1 = 1;
int tv2 = 1;

TestRefVal(ref tv1, tv2, ref tr1, tr2);

Console.WriteLine(tv1);
Console.WriteLine(tv2);
Console.WriteLine(tr1.TestValue);
Console.WriteLine(tr2.TestValue);

Console.ReadLine();
}

static public void TestRefVal(ref int tv1Parm,
int tv2Parm,
ref TestRef tr1Parm,
TestRef tr2Parm)
{
tv1Parm = 2;
tv2Parm = 2;
tr1Parm.TestValue = "New value";
tr2Parm.TestValue = "New value";
}
}
}

class TestRef
{
public string TestValue;
}

The output for this is:

2
1
New value
New value
19. What is an out parameter?
An out parameter allows an instance of a parameter object to be made inside a method. Reference parameters must be initialised but out gives a reference to an uninstanciated object.
20. Write code to show how a method can accept a varying number of parameters.
using System;

namespace Console1
{
class Class1
{
static void Main(string[] args)
{
ParamsMethod(1,"example");
ParamsMethod(1,2,3,4);

Console.ReadLine();
}

static void ParamsMethod(params object[] list)
{
foreach (object o in list)
{
Console.WriteLine(o.ToString());
}
}
}
}
21. What is an overloaded method?
An overloaded method has multiple signatures that are different.
22. What is recursion?
Recursion is when a method calls itself.
23. What is a constructor?
A constructor performs initialisation for an object (including the struct type) or class.
24. If I have a constructor with a parameter, do I need to explicitly create a default constructor?
Yes
25. What is a destructor?
A C# destuctor is not like a C++ destructor. It is actually an override for Finalize(). This is called when the garbage collector discovers that the object is unreachable. Finalize() is called before any memory is reclaimed.
26. Can you use access modifiers with destructors?
No
27. What is a delegate?
A delegate in C# is like a function pointer in C or C++. A delegate is a variable that calls a method indirectly, without knowing its name. Delegates can point to static or/and member functions. It is also possible to use a multicast delegate to point to multiple functions.
28. Write some code to use a delegate.
Member function with a parameter
using System;

namespace Console1
{
class Class1
{
delegate void myDelegate(int parameter1);

static void Main(string[] args)
{
MyClass myInstance = new MyClass();

myDelegate d = new myDelegate(myInstance.AMethod);

d(1); // <--- Calling function without knowing its name. Test2(d); Console.ReadLine(); } static void Test2(myDelegate d) { d(2); // <--- Calling function without knowing its name. } } class MyClass { public void AMethod(int param1) { Console.WriteLine(param1); } } } Multicast delegate calling static and member functions using System; namespace Console1 { class Class1 { delegate void myDelegate(int parameter1); static void AStaticMethod(int param1) { Console.WriteLine(param1); } static void Main(string[] args) { MyClass myInstance = new MyClass(); myDelegate d = null; d += new myDelegate(myInstance.AMethod); d += new myDelegate(AStaticMethod); d(1); //both functions will be run. Console.ReadLine(); } } class MyClass { public void AMethod(int param1) { Console.WriteLine(param1); } } } 29. What is a delegate useful for? The main reason we use delegates is for use in event driven programming. 30. What is an event? See 32 31. Are events synchronous of asynchronous? Asynchronous 32. Events use a publisher/subscriber model. What is that? Objects publish events to which other applications subscribe. When the publisher raises an event all subscribers to that event are notified. 33. Can a subscriber subscribe to more than one publisher? Yes, also - here's some code for a publisher with multiple subscribers. using System; namespace Console1 { class Class1 { delegate void myDelegate(int parameter1); static event myDelegate myEvent; static void AStaticMethod(int param1) { Console.WriteLine(param1); } static void Main(string[] args) { MyClass myInstance = new MyClass(); myEvent += new myDelegate(myInstance.AMethod); myEvent += new myDelegate(AStaticMethod); myEvent(1); //both functions will be run. Console.ReadLine(); } } class MyClass { public void AMethod(int param1) { Console.WriteLine(param1); } } } Another example: using System; using System.Threading; namespace EventExample { public class Clock { public delegate void TwoSecondsPassedHandler(object clockInstance, TimeEventArgs time); //The clock publishes an event that others subscribe to public event TwoSecondsPassedHandler TwoSecondsPassed; public void Start() { while(true) { Thread.Sleep(2000); //Raise event TwoSecondsPassed(this, new TimeEventArgs(1)); } } } public class TimeEventArgs : EventArgs { public TimeEventArgs(int second) { seconds += second; instanceSeconds = seconds; } private static int seconds; public int instanceSeconds; } public class MainClass { static void Main(string[] args) { Clock cl = new Clock(); // add some subscribers cl.TwoSecondsPassed += new Clock.TwoSecondsPassedHandler(Subscriber1); cl.TwoSecondsPassed += new Clock.TwoSecondsPassedHandler(Subscriber2); cl.Start(); Console.ReadLine(); } public static void Subscriber1(object clockInstance, TimeEventArgs time) { Console.WriteLine("Subscriber1:" + time.instanceSeconds); } public static void Subscriber2(object clockInstance, TimeEventArgs time) { Console.WriteLine("Subscriber2:" + time.instanceSeconds); } } } 34. What is a value type and a reference type? A reference type is known by a reference to a memory location on the heap. A value type is directly stored in a memory location on the stack. A reference type is essentially a pointer, dereferencing the pointer takes more time than directly accessing the direct memory location of a value type. 35. Name 5 built in types. Bool, char, int, byte, double 36. string is an alias for what? System.String 37. Is string Unicode, ASCII, or something else? Unicode 38. Strings are immutable, what does this mean? Any changes to that string are in fact copies. 39. Name a few string properties. trim, tolower, toupper, concat, copy, insert, equals, compare. 40. What is boxing and unboxing? Converting a value type (stack->heap) to a reference type (heap->stack), and vise-versa.
41. Write some code to box and unbox a value type.
// Boxing
int i = 4;
object o = i;
// Unboxing
i = (int) o;
42. What is a heap and a stack?
There are 2 kinds of heap – 1: a chunk of memory where data is stored and 2: a tree based data structure. When we talk about the heap and the stack we mean the first kind of heap. The stack is a LIFO data structure that stores variables and flow control information. Typically each thread will have its own stack.
43. What is a pointer?
A pointer is a reference to a memory address.
44. What does new do in terms of objects?
Initializes an object.
45. How do you dereference an object?
Set it equal to null.
46. In terms of references, how do == and != (not overridden) work?
They check to see if the references both point to the same object.
47. What is a struct?
Unlike in C++ a struct is not a class – it is a value type with certain restrictions. It is usually best to use a struct to represent simple entities with a few variables. Like a Point for example which contains variables x and y.
48. Describe 5 numeric value types ranges.
sbyte -128 to 127, byte 0 – 255, short -32,768 to 32,767, int -2,147,483,648 to 2,147,483,647, ulong 0 to 18,446,744,073,709,551,615
49. What is the default value for a bool?
false
50. Write code for an enumeration.
public enum animals {Dog=1,Cat,Bear};
51. Write code for a case statement.
switch (n)
{
case 1:
x=1;
break;
case 2:
x=2;
break;
default:
goto case 1;
}
52. Is a struct stored on the heap or stack?
Stack
53. Can a struct have methods?
Yes
54. What is checked { } and unchecked { }?
By default C# does not check for overflow (unless using constants), we can use checked to raise an exception. E.g.:
static short x = 32767; // Max short value
static short y = 32767;

// Using a checked expression
public static int myMethodCh()
{
int z = 0;

try
{
z = checked((short)(x + y));
//z = (short)(x + y);
}
catch (System.OverflowException e)
{
System.Console.WriteLine(e.ToString());
}
return z; // Throws the exception OverflowException
}

This code will raise an exception, if we remove unchecked as in:

//z = checked((short)(x + y));
z = (short)(x + y);

Then the cast will raise no overflow exception and z will be assigned –2. unchecked can be used in the opposite way, to say avoid compile time errors with constanst overflow. E.g. the following will cause a compiler error:

const short x = 32767; // Max short value
const short y = 32767;

public static int myMethodUnch()
{
int z = (short)(x + y);
return z; // Returns -2
}

The following will not:

const short x = 32767; // Max short value
const short y = 32767;

public static int myMethodUnch()
{
int z = unchecked((short)(x + y));
return z; // Returns -2
}
55. Can C# have global overflow checking?
Yes
56. What is explicit vs. implicit conversion?
When converting from a smaller numeric type into a larger one the cast is implicit. An example of when an explicit cast is needed is when a value may be truncated.
57. Give examples of both of the above.
// Implicit
short shrt = 400;
int intgr = shrt;

// Explicit
shrt = (short) intgr;
58. Can assignment operators be overloaded directly?
No
59. What do operators is and as do?
as acts is like a cast but returns a null on conversion failure. Is comares an object to a type and returns a boolean.
60. What is the difference between the new operator and modifier?
The new operator creates an instance of a class whereas the new modifier is used to declare a method with the same name as a method in one of the parent classes.
61. Explain sizeof and typeof.
typeof obtains the System.Type object for a type and sizeof obtains the size of a type.
62. What doe the stackalloc operator do?
Allocate a block of memory on the stack (used in unsafe mode).
63. Contrast ++count vs. count++.
Some operators have temporal properties depending on their placement. E.g.
double x;
x = 2;
Console.Write(++x);
x = 2;
Console.Write(x++);
Console.Write(x);
Returns
323
64. What are the names of the three types of operators?
Unary, binary, and conversion.
65. An operator declaration must include a public and static modifier, can it have other modifiers?
No
66. Can operator parameters be reference parameters?
No
67. Describe an operator from each of these categories:
Arithmetic: +Logical (boolean and bitwise): &String concatenation: +Increment, decrement: ++Shift: >>Relational: ==Assignment: =Member access: .Indexing: []Cast: ()Conditional: ?:Delegate concatenation and removal: +Object creation: newType information: asOverflow exception control: checkedIndirection and Address: *
68. What does operator order of precedence mean?
Certain operators are evaluated before others. Brackets help to avoid confusion.
69. What is special about the declaration of relational operators?
Relational operators must be declared in pairs.
70. Write some code to overload an operator.
class TempleCompare
{

public int templeCompareID;
public int templeValue;

public static bool operator == (TempleCompare x, TempleCompare y) { return (x.templeValue == y.templeValue); }
public static bool operator != (TempleCompare x, TempleCompare y) { return !(x == y); }

public override bool Equals(object o)
{
// check types match
if (o == null GetType()!= o.GetType()) return false;
TempleCompare t = (templeCompare) o;
return (this.templeCompareID == t.templeCompareID) && (this.templeValue == t.templeValue);
}

public override int GetHashCode() { return templeCompareID; }
}
71. What operators cannot be overloaded?
=, ., ?:, ->, new, is, sizeof, typeof
72. What is an exception?
A runtime error.
73. Can C# have multiple catch blocks?
Yes
74. Can break exit a finally block?
No
75. Can Continue exit a finally block?
No
76. Write some try…catch…finally code.
// try-catch-finally
using System;
public class TCFClass
{
public static void Main ()
{
try
{
throw new NullReferenceException();
}

catch(NullReferenceException e)
{
Console.WriteLine("{0} exception 1.", e);
}

catch
{
Console.WriteLine("exception 2.");
}

finally
{
Console.WriteLine("finally block.");
}
}
}
77. What are expression and declaration statements?
· Expression – produces a value e.g. blah = 0
· Declaration – e.g. int blah;
78. A block contains a statement list {s1;s2;} what is an empty statement list?
{;}
79. Write some if… else if… code.
int n=4;

if (n==1)
Console.WriteLine("n=1");
else if (n==2)
Console.WriteLine("n=2");
else if (n==3)
Console.WriteLine("n=3");
else
Console.WriteLine("n>3");
80. What is a dangling else?
if (n>0)
if (n2>0)
Console.Write("Dangling Else")
else
81. Is switch case sensitive?
Yes
82. Write some code for a for loop
for (int i = 1; i <= 5; i++) Console.WriteLine(i); 83. Can you increment multiple variables in a for loop control? Yes – e.g. for (int i = 1; j = 2;i <= 5 ;i++ ;j=j+2) 84. Write some code for a while loop. int n = 1; while (n < y =" 0;" x =" y++;" x =" 0," y =" 0;" arr =" new" 2 ="=" contents =" contents;" location =" -1;" i =" i;" location =" -1;" myarray =" {" items =" new" c1 =" 5;" b =" {{0," myarray =" new" list =" new" m =" new" mydata =" {" a =" value;" allowmultiple="true)]" name =" name;" version =" 1.0;" tc1 =" new" tc2 =" new" ot1 =" new" ot2 =" new" lockvalue = "dummy" threadnumber =" threadNumber;">
///
///
///
///
///
///
///
///

///
///
///
///
///
///
///

158. What is unsafe code?
Unsafe code bypasses type safety and memory management.
159. What does the fixed statement do?
Prevents relocation of a variable by GC.
160. How would you read and write using the console?
Console.Write, Console.WriteLine, Console.Readline
161. Give examples of hex, currency, and fixed point console formatting.
Console.Write("{0:X}", 250); à FA
Console.Write("{0:C}", 2.5); à $2.50
Console.Write("{0:F2}", 25); à 25.00
162. Given part of a stack trace: aspnet.debugging.BadForm.Page_Load(Object sender, EventArgs e) +34. What does the +34 mean?
It is an actual offset (at the assembly language level) – not an offset into the IL instructions.
163. Are value types are slower to pass as method parameters?
Yes
164. How can you implement a mutable string?
System.Text.StringBuilder
165. What is a thread pool?
A thread pool is a means by which to control a number of threads simultaneously. Thread pools give us thread reuse, rather than creating a new thread every time.
166. Describe the CLR security model.
From
http://msdn.microsoft.com/msdnmag/issues/02/09/SecurityinNET/default.aspx
“Unlike the old principal-based security, the CLR enforces security policy based on where code is coming from rather than who the user is. This model, called code access security, makes sense in today's environment because so much code is installed over the Internet and even a trusted user doesn't know when that code is safe.”
167. What’s the difference between camel and pascal casing?
PascalCasing, camelCasing
168. What does marshalling mean?
From
http://www.dictionary.net/marshalling
“The process of packing one or more items of data into a message buffer, prior to transmitting that message buffer over a communication channel. The packing process not only collects together values which may be stored in non-consecutive memory locations but also converts data of different types into a standard representation agreed with the recipient of the message.”
169. What is inlining?
From (Google web defintions)
“In-line expansion or inlining for short is a compiler optimization which "expands" a function call site into the actual implementation of the function which is called, rather than each call transferring control to a common piece of code. This reduces overhead associated with the function call, which is especially important for small and frequently called functions, and it helps call-site-specific compiler optimizations, especially constant propagation.”
170. List the differences in C# 2.0.
· Generics
· Iterators
· Partial class definitions
· Nullable Types
· Anonymous methods
· :: operator
· Static classes static class members
· Extern keyword
· Accessor accessibility
· Covariance and Contravariance
· Fixed size buffers
· Fixed assemblies
· #pragma warning
171. What are design patterns?
From
http://www.dofactory.com/Patterns/Patterns.aspx
“Design patterns are recurring solutions to software design problems you find again and again in real-world application development.”
172. Describe some common design patterns.
From
http://www.dofactory.com/Patterns/Patterns.aspx
Creational Patterns
Abstract Factory Creates an instance of several families of classes
Builder Separates object construction from its representation
Factory Method Creates an instance of several derived classes
Prototype A fully initialized instance to be copied or cloned
Singleton A class of which only a single instance can exist
Structural Patterns
Adapter Match interfaces of different classes
Bridge Separates an object’s interface from its implementation
Composite A tree structure of simple and composite objects
Decorator Add responsibilities to objects dynamically
Façade A single class that represents an entire subsystem
Flyweight A fine-grained instance used for efficient sharing
Proxy An object representing another object
Behavioral Patterns
Chain of Resp. A way of passing a request between a chain of objects
Command Encapsulate a command request as an object
Interpreter A way to include language elements in a program
Iterator Sequentially access the elements of a collection
Mediator Defines simplified communication between classes
Memento Capture and restore an object's internal state
Observer A way of notifying change to a number of classes
State Alter an object's behavior when its state changes
Strategy Encapsulates an algorithm inside a class
Template Method Defer the exact steps of an algorithm to a subclass
Visitor Defines a new operation to a class without change
173. What are the different diagrams in UML? What are they used for?
From

http://www.developer.com/design/article.php/1553851


“Use case diagram: The use case diagram is used to identify the primary elements and processes that form the system. The primary elements are termed as "actors" and the processes are called "use cases." The use case diagram shows which actors interact with each use case.
Class diagram: The class diagram is used to refine the use case diagram and define a detailed design of the system. The class diagram classifies the actors defined in the use case diagram into a set of interrelated classes. The relationship or association between the classes can be either an "is-a" or "has-a" relationship. Each class in the class diagram may be capable of providing certain functionalities. These functionalities provided by the class are termed "methods" of the class. Apart from this, each class may have certain "attributes" that uniquely identify the class.
Object diagram: The object diagram is a special kind of class diagram. An object is an instance of a class. This essentially means that an object represents the state of a class at a given point of time while the system is running. The object diagram captures the state of different classes in the system and their relationships or associations at a given point of time.
State diagram: A state diagram, as the name suggests, represents the different states that objects in the system undergo during their life cycle. Objects in the system change states in response to events. In addition to this, a state diagram also captures the transition of the object's state from an initial state to a final state in response to events affecting the system.
Activity diagram: The process flows in the system are captured in the activity diagram. Similar to a state diagram, an activity diagram also consists of activities, actions, transitions, initial and final states, and guard conditions.
Sequence diagram: A sequence diagram represents the interaction between different objects in the system. The important aspect of a sequence diagram is that it is time-ordered. This means that the exact sequence of the interactions between the objects is represented step by step. Different objects in the sequence diagram interact with each other by passing "messages".
Collaboration diagram: A collaboration diagram groups together the interactions between different objects. The interactions are listed as numbered interactions that help to trace the sequence of the interactions. The collaboration diagram helps to identify all the possible interactions that each object has with other objects.
Component diagram: The component diagram represents the high-level parts that make up the system. This diagram depicts, at a high level, what components form part of the system and how they are interrelated. A component diagram depicts the components culled after the system has undergone the development or construction phase.
Deployment diagram: The deployment diagram captures the configuration of the runtime elements of the application. This diagram is by far most useful when a system is built and ready to be deployed.”

No comments:

Post a Comment