1) C# supporte t’il l’héritage multiple ?
2) Pour qui sont disponibles les variables de type Protected comprises dans une classe ?
Pour toutes les sous-classes de la classe comprenant ces variables de type protected.
3) Est-ce que les variables de type privées sont héritées ?
Oui, mais elles ne sont pas accessibles. Bien qu’elles ne soient ni visibles et ni accessibles, elles sont héritées. Si vous voulez la rendre accessible aux sous-classes, vous devez utilisez une variable protected.
4) Décrire l’accessibilité du “protected internal” ?
Sera disponbile pour les classes qui se trouvent dans le même assembly et qui sont dérivés de cette classe de base.
5) De quelle classe sont dérivés tous les objets en .NET ?
System.Object.
6) Que veut dire le terme “immutable” (immuable en Français) ?
Que la valeur de donnée (datavalue) ne peut-être changée. La valeur d’une variable peut être changée mais on est alors débarrasé de la valeur de données immuable et une nouvelle valeur de données a été créée.
7) Quelle est la différence entre les classes System.String et System.Text.StringBuilder ?
System.String est immuable. Stringbuilder a été créé pour manipuler des strings muables où des opérations sur ceux-ci peuvent être réalisées.
8 ) Quelle est l’avantage d’utiliser StringBuilder plutôt que String ?
Stringbuilder est plus performant si il faut manipuler un grand montant de string. String est immuable, c’est à dire qu’il recrée une nouvelle instance en mémoire à chaque fois que sa valeur change.
9) Pouvez-vous utiliser plusieurs types dans un System.Array ?
non
10) Quelle est la différence entre System.Array.CopyTo() et System.Array.Clone() ?
La méthode copy retourne un nouvel array (shallow copy (copie peu profonde, frivole)) d’objets contenant tous les éléments de l’array original. La méthode CopyTo() copie les éléments de l’array original dans un array existant. Les deux réalisent une copie peu profonde. Une copie peu profonde est le fait que le contenu (chaque élément d’un array) contiennent les références des mêmes objets que les éléments de l’array orginel. Une copie profonde (deep copy) aurait crée une nouvelle instance de chaque élément de l’objet orignal.
11) Comment trier un array dans le sens décroissant ?
On utilise la méthode Sort() et ensuite la méthode Reverse().
12) Quelle classe de collection peut-on utiliser pour accéder un de ses éléments par une clé d’accès ?
HashTable
13) Quelle classe se trouve à un niveau plus bas de Sorted List ?
Sorted HashTable
14) Dans un try catch, est-ce que le block “finally” sera exécuté si une exeption ne se produit pas?
oui
15) Quelle est la syntaxe qui permet de saisir toutes les exeptions possibles ?
Un catch qui intercepterait les exeptions de type System.Exception. Si vous utilisez le catch par défaut (catch{}), cela aura le même effet.
16) Peut-on avoir plusieurs catch exécutés lors d’un même try ?
non, le contrôle sera exécuté dans la partie finally du try.
17) Quels sont les 3 parties d’une 3-tiers application ?
Presentation (UI), Business , Data
1) Quelle est la syntaxe pour hériter d’un classe en C# ?
NomdelaClasseEnfant : NomdelaClasseParent
2) Pouvez-vous empêcher une classe d’être hériter par une autre classe ?
Oui en utilisant le keyword “sealed”.
3) Pouvez-vous permettre à une classe d’être héritable mais empêcher qu’une de ses méthodes soit “overrider” ?
Oui, il faut rendre la classe public et la méthode “sealed”.
4) Qu’est-ce qu’une classe abstraite ?
C’est une classe qui ne peut-être instanciée, c’est une classe qui peut être héritée et qui peut posséder des méthodes qui peuvent-être spécialisée (”overrider”). Une classe abstaite est générallement une emprunte pour d’autres classes.
5) Quand devez-vous absolument définir une classe abstaite ?
- lorsqu’au moins une des méthodes est abstraite
- lorsq’une classe est elle-même héritée d’une classe abstraite et que toute ses méthodes abstraites héritées n’ont pas été redéfinir (”overrider”).
6) Qu’est-ce qu’une interface ?
Les interfaces, comme les classes définissent une série de propriété, méthodes, évênements. Mais contrairement au classe, les intefaces ne fournissent pas d’implémentation. Elles sont implémentées par des classes
7) Pourquoi ne pouvez-vous pas définir d’accesseur pour une méthode à l’intérieur d’une interface ?
Elles doivent toutes être publique, elles sont donc public par défaut.
8 ) Pouvez-vous hériter de plusieurs interfaces ?
oui, .NET supporter le multi-héritage d’interface
9) Pouvez-vous hériter de plusieurs interfaces qui ont des méthodes de même nom et même signature ?
Oui vous pouvez, mais il risque d’y avoir quelques problèmes. Si le compilateur est ok, cela devrait passer. PS : En testant, j’ai remarqué vous pouviez, en effet, hériter de plusieurs interfaces qui ont des méthodes de même nom, mais alors nous devons en choisir une qui sera public, les autres seront marquées privées. Enfin, je déconseillerais de réaliser ce genre de chose.
10) Quel est la différence entre une classe abstraite et une interface ?
Dans une inteface, toutes les méthodes sont abstraites, il n’y pas d’implémentation. Dans une classe abstraite, les méthodes peuvent-être non abstraite mais il n’y a pas d’implémentation. On peut, également, hériter de plusieurs interfaces alors qu’on ne peut hériter que d’une classe abstraite.
11) Quel est la différence entre une struct et une classe ?
Les Strucs sont des variables “value type” et sont donc sauvés dans la stack, ils augmentent la taille en mémoire mais augmentent les performances d’accès. Les structs ne peuvent pas être héritées.
1) Quel est le nom implicite du paramètre qui est passé à l’intérieur de la méthode/propriété set d’une classe?
La réponse est Value. Le type de la donnée value est définie par le type de la propriété qui est déclarée.
2) Que veut dire le keyword “vitrual” devant une propriété et/ou une méthode ?
Que la méthode et/ou propriété peut être redéfinie (”overrider”)?
3) En quoi la redifinission (”overrider”) d’une méthode est telle différente de la surchage d’une méthode (overload) ?
Quand vous redéfinissez une méthode, vous changer le comportement de la classe dérivée (vous spécialisez la méthode à sa classe concrète). La surchage d’une méthode entraîne juste le fait d’avoir plusieurs méthodes avec le même nom dans une classe. Ces méthodes ne possèderont pas la même signature.
4) Pouvez-vous redéfinir (”override”) une méthode et la rendre statique, si celle-ci ne l’était pas dans sa classe de base ?
Non, la signature de la méthode doit rester la même (on ne peut changer override que par virtual).
5) Quelles sont les différentes manières de surcharger une méthode ?
Différents paramètres (data type), nombre de paramètres différents, ordre dont les parramètres sont passés.
6) Si une classe de base à un nombre certain de constructeurs surchargés, et la classe héritée a un certain nombre de constructeurs surchargés également, pouvez-vous forcer l’appel du constructeur de la classe de base depuis la classe spécifique?
oui, ajouter “:base()” et entre les parenthèses, les paramètres que vous voulez réutiliser de votre classe de base.
1) Qu’est qu’un delegates ?
Un delegate encapsule un référencement vers une méthode.
2) Qu’est ce qu’un multicast delegates ?
Un délégate qui a plusieurs méthodes référencées (handler), toutes ces méthodes seront appelées.
1) XML est-il sensible à la case ?
oui
2) Quelles sont les différences entre // , /// ,/* */ ?
// => commentaire sur une ligne
/// => commentaire en XML
/* */ => commentaire multi-ligne
3) Comment générer de la documentation depuis des commentaires appartenant à un fichier C# avec un compiler en ligne de commande ?
Compilez le avec la balise /doc
1) Quel(s) outil(s) de debugging est fourni avec le sdk .NET ?
- CorDBG : command line debugger. Pour utiliser le CordDBG vous devez compiler en ligne de commande avec l’attribu /debug.
- DbgCLR : le debugger en mode graphique, utilisé par Visual Studio.
2) Que fait la méthode Assert() ?
En debug, assert prend une condition booléene comme paramètre et montre la boîte de dialog error si la condition est fausse. Le programme s’exécutera si la condition est vrai.
3) Quelle est la différence entre la classe debug et la classe trace ?
La documentation semble la même, utilisez la classe debug pour debulg build, utilisez la classe Trace pour les builds debug et release.
4) Où la sortie de TextWriterTraceListener est-il redirigé ?
Soit dans une console, soit dans un fichier, dépendant des paramètres qui lui sont passés.
5) Comment débugger une application ASP.NET ?
Attachez le process aspnet_wp.exe au débugger dbgclr;
6) Quels sont les trois types de test vous devriez tester dans vos tests unitaires ?
- Un cas de test positif : donnée correcte, sortie correcte.
- Un cas de test négatif : donnée incorrecte ou manquante et exécution propre.
- Un cas d’exeption : vérifier si les exceptions sont gérer correctement.
7) Pouvez-vous changer la valeur d’une variable pendant que vous debugger une application C# ?
Oui, si nous débuggons via Visual Studio .NET, se rendre sur Immediate Window.
1) Quel est le rôle de la classe DataReader dans ADO.NET ?
Un DataReader retourne un ensemble de row, read-only et forward-only à partir d’un datasource.
2) Quels sont les avantages et les inconvénients des data provider fourni par Microsoft dans ADO.NET ?
SqlServer.NET data provider une solution performante et robuste pour accéder à un serveur SQL. Cependant microsoft fournit une classe OLE-DB.NET qui permet d’accéder aussi-bien des base de données Oracle, DB2,… Cependant, cette couche n’est pas aussi performante et efficace que la couche d’accès pour Sql Server.
3) Quel est le caractère de remplacement (wild card) en SQL ?
Réponse : %, utiliser avec LIKE dans les query SQL.
4) Expliquez les règles d’or ACID pour les transactions ?
Une transaction doit être:
- Atomic : cette unité de travail ne doit pas dépendre des transactions précédentes ou futures.
- Consistent : Les données doivent être conformes et un système de roll-back doit être mis en place. Il ne dois pas y avoir de valeur “in-between”, le cas ou une partie a été mise à jour et pas l’autre.
- Isolated : aucune transaction ne voit le résultat intermédiare de la transaction actuelle.
- Durable : La donnée doit persistée si elle est conforme même si par après le système plante.
5) Quels types de connections supportent SQL Server ?
Windows Authentication (via Active Directory) et SQL authentication (via SQL Server avec un login et un mot de passe).
6) Entre windows authentication et sql server authentication, lequel est “trusted”, lequel ne l’est pas ?
Windows authentication est trusted car le usernam et le password est vérifié par Active Directory, Sql server est untrusted car il est le seul à participer
7) Qu’est ce que définit le “initial catalog” dans le connexion string ?
le nom de la database
Que fait la méthode Dispose avec l’objet Connection ?
il le supprime de la mémoire.
9) Quel est le prérequis pour un connection pooling ?
La procédures multiples doivent accepter de partarger la même connection, tout les paramètres doivent être les mêmes (paramètres de sécurité inclus). Le connection string doit être identique.
1) Quels sont les possibilités pour déployer un assembly ?
un MSI Installer, une archive CAB, la commande XCOPY
2) Qu’est ce qu’un assembly satellite ?
Lorsque vous écrivez une application multi-lingue et/ou multi-cultures en .NET, vous voulez distribuer le core de l’application séparrément de ces modules localisés. Les assembly localisées sont alors des assembly satellite.
3) Quels sont les namespace à incorporer pour une application localisée ?
System.Globalization et System.Ressources
4) Quelle est la plus petite unité d’exécution en .NET ?
un assembly
5) Quand devez-vous appeler le Garbage Collector en .NET ?
Normalement jamais. Néanmoins, vous pouvez appeler le Garbage collector lorsque vous vous débarasser d’ objets conséquents en mémoire dont vous n’avez plus l’utilité.
6) Quel nom porte l’action de convertir un value-type en reference-type?
Boxing
7) Que se passe t’il en mémoire lorsque vous “boxez” une valute-type en reference type ?
L’objet créé par boxing se mémorisera dans le heap (passage du stack au heap). Unboxing est l’opération inverse, il convertit un type référence en un value-type, c’est à dire passage du heap au stack.
Je rajouterai au fur et à mesure de nouvelles questions, mon but étant de faire une sorte de FAQ sur le C# à connaître avant de passer une interview.