Interview Questions
C# - Part 1
- What’s the implicit name of the
parameter that gets passed into the class’ set method? Value, and its
datatype depends on whatever variable we’re changing.
- How do you inherit from a class
in C#? Place
a colon and then the name of the base class. Notice that it’s double colon
in C++.
- Does C# support multiple
inheritance? No,
use interfaces instead.
- When you inherit a protected
class-level variable, who is it available to? Classes in the same namespace.
- Are private class-level
variables inherited? Yes,
but they are not accessible, so looking at it you can honestly say that
they are not inherited. But they are.
- Describe the accessibility
modifier protected internal. It’s available to derived classes and classes
within the same Assembly (and naturally from the base class it’s declared
in).
- C# provides a default
constructor for me. I write a constructor that takes a string as a
parameter, but want to keep the no parameter one. How many constructors
should I write? Two.
Once you write at least one constructor, C# cancels the freebie
constructor, and now you have to write one yourself, even if there’s no
implementation in it.
- What’s the top .NET class that
everything is derived from? System.Object.
- How’s method overriding
different from overloading? When overriding, you change the method behavior
for a derived class. Overloading simply involves having a method with the
same name within the class.
- What does the keyword virtual
mean in the method definition? The method can be over-ridden.
- Can you declare the override
method static while the original method is non-static? No, you can’t, the
signature of the virtual method must remain the same, only the keyword
virtual is changed to keyword override.
- Can you override private
virtual methods? No,
moreover, you cannot access private methods in inherited classes, have to
be protected in the base class to allow any sort of access.
- Can you prevent your class from
being inherited and becoming a base class for some other classes? Yes, that’s what
keyword sealed in the class definition is for. The developer trying to
derive from your class will get a message: cannot inherit from Sealed
class WhateverBaseClassName. It’s the same concept as final class in Java.
- Can you allow class to be
inherited, but prevent the method from being over-ridden? Yes, just leave the
class public and make the method sealed.
- What’s an abstract class? A class that cannot
be instantiated. A concept in C++ known as pure virtual method. A class
that must be inherited and have the methods over-ridden. Essentially, it’s
a blueprint for a class without any implementation.
- When do you absolutely have to
declare a class as abstract (as opposed to free-willed educated choice or
decision based on UML diagram)? When at least one of the
methods in the class is abstract. When the class itself is inherited from
an abstract class, but not all base abstract methods have been
over-ridden.
- What’s an interface class? It’s an abstract
class with public abstract methods all of which must be implemented in the
inherited classes.
- Why can’t you specify the accessibility
modifier for methods inside the interface? They all must be public.
Therefore, to prevent you from getting the false impression that you have
any freedom of choice, you are not allowed to specify any accessibility,
it’s public by default.
- Can you inherit multiple
interfaces?
Yes, why not.
- And if they have conflicting
method names? It’s
up to you to implement the method inside your own class, so implementation
is left entirely up to you. This might cause a problem on a higher-level
scale if similarly named methods from different interfaces expect
different data, but as far as compiler cares you’re okay.
- What’s the difference between
an interface and abstract class? In the interface all methods
must be abstract; in the abstract class some methods can be concrete. In
the interface no accessibility modifiers are allowed, which is ok in
abstract classes.
- How can you overload a method? Different parameter
data types, different number of parameters, different order of parameters.
- If a base class has a bunch of
overloaded constructors, and an inherited class has another bunch of
overloaded constructors, can you enforce a call from an inherited
constructor to an arbitrary base constructor? Yes, just place a colon, and
then keyword base (parameter list to invoke the appropriate constructor)
in the overloaded constructor definition inside the inherited class.
- What’s the difference between
System.String and System.StringBuilder classes? System.String is
immutable; System.StringBuilder was designed with the purpose of having a
mutable string where a variety of operations can be performed.
- What’s the advantage of using
System.Text.StringBuilder over System.String? StringBuilder is more efficient
in the cases, where a lot of manipulation is done to the text. Strings are
immutable, so each time it’s being operated on, a new instance is created.
- Can you store multiple data
types in System.Array? No.
- What’s the difference between
the System.Array.CopyTo() and System.Array.Clone()? The first one
performs a deep copy of the array, the second one is shallow.
- How can you sort the elements
of the array in descending order? By calling Sort() and then
Reverse() methods.
- What’s the .NET datatype that
allows the retrieval of data by a unique key? HashTable.
- What’s class SortedList
underneath? A
sorted HashTable.
- Will finally block get
executed if the exception had not occurred? Yes.
- What’s the C# equivalent of C++
catch (…), which was a catch-all statement for any possible exception? A catch block that
catches the exception of type System.Exception. You can also omit the
parameter data type in this case and just write catch {}.
- Can multiple catch blocks be
executed? No,
once the proper catch code fires off, the control is transferred to the
finally block (if there are any), and then whatever follows the finally
block.
- Why is it a bad idea to throw your own exceptions? Well, if at that point you know that an error has occurred, then why not write the proper code to handle that error instead of passing a new Exception object to the catch block? Throwing your own exceptions signifies some design flaws in the project.
Here are a few good C# questions as well:
ReplyDeletehttp://cc.davelozinski.com/general/tricky-csharp-and-sql-interview-questions
_