-
Notifications
You must be signed in to change notification settings - Fork 0
/
questions.json
631 lines (620 loc) · 51.6 KB
/
questions.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
{
"Writing a C# Program": [
{
"question": "Which of the following is the correct way to declare a method in C#?",
"choices": ["A. public int myMethod() {}", "B. int public myMethod() {}", "C. method public int myMethod() {}", "D. public myMethod() int {}"],
"answer": "A",
"reason": "In C#, the correct syntax for declaring a method includes the access modifier (e.g., public), the return type (e.g., int), the method name (e.g., myMethod), followed by parentheses for parameters and a body enclosed in curly braces."
},
{
"question": "In C# which symbol is used to denote a single-line comment?",
"choices": ["A. /* */", "B. <!-- -->", "C. //", "D. #"],
"answer": "C",
"reason": "For single-line comments, C# uses two forward slashes '//' to denote the beginning of a comment. The comment ends at the end of the line."
}
],
"Variables and Expressions": [
{
"question": "What is the correct way to declare a string variable in C#?",
"choices": ["A. string myVar = \"Hello\";", "B. String myVar = \"Hello\";", "C. str myVar = \"Hello\";", "D. Both A and B"],
"answer": "D",
"reason": "In C#, both 'string' and 'String' can be used to declare a string variable because 'string' is an alias in C# for 'System.String'."
},
{
"question": "Which of the following variable names follows C# naming conventions for local variables?",
"choices": ["A. MyVariable", "B. myVariable", "C. _MyVariable", "D. my_variable"],
"answer": "B",
"reason": "According to C# naming conventions, local variables should be camelCase with the first letter being lowercase. 'myVariable' follows this convention."
},
{
"question": "In C# what will be the value of result after executing the following code? int x = 5; int y = 2; int result = x / y;",
"choices": ["A. 2.5", "B. 2", "C. 3", "D. 5"],
"answer": "B",
"reason": "In C#, the '/' operator performs integer division when used with integers. Since both x and y are integers, the division 5 / 2 will discard the fractional part and result in 2."
},
{
"question": "Which of the following operators is used for concatenation of strings in C#?",
"choices": ["A. +", "B. &", "C. *", "D. ||"],
"answer": "A",
"reason": "In C#, the '+' operator is used for the concatenation of strings. It combines the strings placed on either side of the operator."
},
{
"question": "If a = 10 and b = 5, what is the value of c in the following expression? int c = (a > b) ? a : b;",
"choices": ["A. 10", "B. 5", "C. 15", "D. 0"],
"answer": "A",
"reason": "The expression uses the ternary operator '? :'. It evaluates to 'a' (which is 10) if the condition 'a > b' is true, otherwise it evaluates to 'b'. Since 10 is greater than 5, c equals 10."
}
],
"Flow Control": [
{
"question": "Which of the following represents the logical AND operator in C#?",
"choices": ["A. ||", "B. &&", "C. !", "D. =="],
"answer": "B",
"reason": "In C#, the logical AND operator is represented by '&&'. It returns true if both operands are true."
},
{
"question": "In C# what is the result of true || false?",
"choices": ["A. true", "B. false", "C. An error occurs", "D. None of the above"],
"answer": "A",
"reason": "The '||' operator is the logical OR operator in C#. It returns true if either of its operands is true. Since one operand is true ('true'), the result is true."
},
{
"question": "What keyword is used to define a decision-making structure in C#?",
"choices": ["A. select", "B. if", "C. decide", "D. condition"],
"answer": "B",
"reason": "The 'if' keyword is used in C# to define a decision-making structure. It executes a block of code if the specified condition is true."
},
{
"question": "In C# how do you execute a block of code multiple times based on a condition at the end of the loop?",
"choices": ["A. for loop", "B. while loop", "C. do-while loop", "D. foreach loop"],
"answer": "C",
"reason": "The 'do-while' loop in C# executes the code block at least once before checking the condition at the end of the loop. The loop continues as long as the condition is true."
},
{
"question": "In C# which loop structure is typically used for iterating over a collection with a known number of elements using an index?",
"choices": ["A. while loop", "B. for loop", "C. do-while loop", "D. foreach loop"],
"answer": "B",
"reason": "The 'for' loop is used in C# for iterating over a collection with a known number of elements using an index. It is ideal for when the number of iterations is known beforehand."
},
{
"question": "How do you break out of a loop in C#?",
"choices": ["A. exit", "B. break", "C. continue", "D. return"],
"answer": "B",
"reason": "The 'break' keyword is used in C# to exit a loop prematurely, regardless of the loop's condition."
},
{
"question": "What does the foreach statement do in C#?",
"choices": ["A. Executes a block of code at least once before checking the condition", "B. Loops through a block of code a fixed number of times", "C. Executes a block of code as long as a specified condition is true", "D. Repeats a block of code for each element in a collection"],
"answer": "D",
"reason": "The 'foreach' statement in C# iterates through each element in a collection. It is used to execute a block of code for each element in the collection."
}
],
"More about Variables": [
{
"question": "Which of the following is an example of an implicit conversion in C#?",
"choices": ["A. Converting a char to a string", "B. Converting a double to an int", "C. Converting a string to an int", "D. Converting an int to a double"],
"answer": "D",
"reason": "Implicit conversion in C# does not require a cast and happens automatically, such as when converting a smaller type (int) to a larger type (double) without data loss."
},
{
"question": "What is an enum used for in C#?",
"choices": ["A. To declare a set of named constants", "B. To define a new class type", "C. To create a collection of strings", "D. To initialize a new array"],
"answer": "A",
"reason": "An enum (enumeration) in C# is used to declare a set of named integer constants, making the code more readable and manageable."
},
{
"question": "Which of the following statements is true about structs in C#?",
"choices": ["A. Structs can inherit from other structs or classes.", "B. Structs are reference types.", "C. Structs are value types.", "D. Structs cannot contain methods."],
"answer": "C",
"reason": "Structs in C# are value types and they store data values directly. They are different from classes, which are reference types."
},
{
"question": "How do you declare and initialize an array of integers in C#?",
"choices": ["A. int[] array = new int[5] {1, 2, 3, 4, 5};", "B. int array[] = {1, 2, 3, 4, 5};", "C. array<int> = [1, 2, 3, 4, 5];", "D. int[] array = {1, 2, 3, 4, 5};"],
"answer": "D",
"reason": "In C#, an array of integers can be declared and initialized using the syntax 'int[] array = {1, 2, 3, 4, 5};'. This creates an array with the specified elements."
},
{
"question": "What does the Trim() method do when applied to a string in C#?",
"choices": ["A. Converts all characters in the string to lowercase", "B. Adds padding to the left side of the string", "C. Removes all leading and trailing white-space characters from the string", "D. Splits the string into a array of substrings"],
"answer": "C",
"reason": "The Trim() method in C# is used to remove all leading and trailing white-space characters from a string. It does not affect the middle spaces."
},
{
"question": "In C# which of the following correctly checks if a string str is empty or null?",
"choices": ["A. str.IsEmptyOrNull()", "B. String.IsEmptyOrNull(str)", "C. string.IsNullOrEmpty(str)", "D. str == \"\" || str == null"],
"answer": "C",
"reason": "The 'string.IsNullOrEmpty(str)' method is a standard way in C# to check if a string is either null or has a length of zero, effectively being empty."
},
{
"question": "Which methods can be used to convert a string to an integer in C#?",
"choices": ["A. int.Parse(string) and Convert.ToInt32(string)", "B. string.ToInt() and int.Convert(string)", "C. string.ParseInt() and Convert.ToInteger(string)", "D. int.FromString(string) and ToInteger(string)"],
"answer": "A",
"reason": "In C#, 'int.Parse(string)' and 'Convert.ToInt32(string)' are common methods used to convert a string representation of a number into an integer."
}
],
"Functions": [
{
"question": "What is a function in C# that does not return any data called?",
"choices": ["A. Constructor", "B. Destructor", "C. Method", "D. Void"],
"answer": "D",
"reason": "In C#, a function that does not return any data is defined with the return type 'void'. It performs operations but does not return a value."
},
{
"question": "In C# a local variable declared within a loop inside a method is accessible:",
"choices": ["A. Anywhere in the same class", "B. Anywhere in the same method", "C. Only within the loop it is declared in", "D. In any loops nested within that loop"],
"answer": "C",
"reason": "A local variable declared within a loop in C# is only accessible within the scope of that loop. It cannot be accessed outside the loop where it was declared."
},
{
"question": "Which of the following best describes a local variable in C#?",
"choices": ["A. A variable declared outside any method accessible to all methods in the class", "B. A static variable declared within a method", "C. A variable declared inside a class but outside any method", "D. A variable declared inside a method accessible only within that method"],
"answer": "D",
"reason": "In C#, a local variable is one that is declared within a method and is only accessible within that method. It cannot be accessed from outside the method."
},
{
"question": "Which of the following is the correct way to access the first command-line argument in a C# application?",
"choices": ["A. Main(string[] args) { var firstArg = args[0]; }", "B. Main() { var firstArg = Console.ReadLine(); }", "C. Main(string args) { var firstArg = args.Split(' ')[0]; }", "D. Main() { var firstArg = args[0]; }"],
"answer": "A",
"reason": "In a C# application, command-line arguments are accessed via the 'args' array in the Main method. 'args[0]' refers to the first argument."
},
{
"question": "In C# can a struct have methods?",
"choices": ["A. Yes but only static methods", "B. No structs cannot have methods", "C. Yes but only if the struct is immutable", "D. Yes both static and instance methods"],
"answer": "D",
"reason": "In C#, structs can have both static and instance methods. Structs are versatile in that they can contain a variety of member types, including methods."
},
{
"question": "What is function overloading in C#?",
"choices": ["A. Defining multiple functions with the same name but different return types", "B. Defining multiple functions with the same name and number of parameters", "C. Defining multiple functions with the same name but different parameter types or numbers", "D. Redefining a function from a base class in a derived class"],
"answer": "C",
"reason": "Function overloading in C# refers to having multiple methods with the same name but different parameter lists (either in type or number of parameters)."
},
{
"question": "Given two overloaded methods in C# one accepting a string and the other an int, what determines which method is called?",
"choices": ["A. The type of the first argument passed to the method", "B. The number of arguments passed to the method", "C. The return type of the method", "D. The order in which the methods are declared in the class"],
"answer": "A",
"reason": "When methods are overloaded in C#, the method that is called depends on the type of the argument passed. The argument's type must match one of the method's parameter types."
},
{
"question": "What defines the scope of a local variable in a C# method?",
"choices": ["A. The entire class in which the variable is declared", "B. Only the method in which the variable is declared", "C. Any method within the same namespace", "D. Anywhere in the application where the class is accessible"],
"answer": "B",
"reason": "The scope of a local variable in C# is limited to the method in which it is declared. It cannot be accessed from other methods, even within the same class."
},
{
"question": "What is the difference between ref and out parameters in C#?",
"choices": ["A. ref requires the variable to be initialized before passing it whereas out does not", "B. out allows a method to return multiple values while ref does not", "C. ref passes by reference while out passes by value", "D. There is no difference; they are interchangeable"],
"answer": "A",
"reason": "The correct answer is A. In C#, when using the 'ref' parameter modifier, the variable must be initialized before passing it to the method. On the other hand, when using the 'out' parameter modifier, the variable does not need to be initialized before passing it to the method."
},
{
"question": "How can you use a Tuple to store and access a pair of values an integer and a string in C#?",
"choices": ["A. var myTuple = Tuple<int string>(1 'World')", "B. var myTuple = Tuple.Create(1 'Hello')", "C. Tuple<int string> myTuple = new(1 'Hello')", "D. var myTuple = (1 'Hello')"],
"answer": "D",
"reason": "The correct way to use a Tuple to store and access a pair of values in C# is by using the syntax 'var myTuple = (1, 'Hello')'. This creates a Tuple with an integer value of 1 and a string value of 'Hello'."
}
],
"Debugging and Error Handling": [
{
"question": "What keyword is used in C# to handle exceptions?",
"choices": ["A. try", "B. error", "C. catch", "D. exception"],
"answer": "C",
"reason": "The 'catch' keyword is used in C# to define a block of code, known as a catch block, to handle exceptions that occur during execution."
},
{
"question": "In C# which block is used to finally execute code regardless of whether an exception occurred?",
"choices": ["A. finally", "B. always", "C. else", "D. lastly"],
"answer": "A",
"reason": "The 'finally' block in C# is used to execute code after try and catch blocks, regardless of whether an exception was thrown or caught."
},
{
"question": "What is the purpose of the throw keyword in C#?",
"choices": ["A. To end the execution of the current method", "B. To exit a loop or switch statement", "C. To signal the occurrence of an exception", "D. To bypass error logging"],
"answer": "C",
"reason": "The 'throw' keyword in C# is used to signal the occurrence of an exception. It is used to throw an exception explicitly."
},
{
"question": "Which statement correctly describes the try block in C#?",
"choices": ["A. A try block is used to define a block of code in which exceptions are ignored.", "B. A try block encloses code that might throw an exception and must be followed by one or more catch blocks.", "C. A try block is used to list the exceptions that a method can throw.", "D. A try block contains cleanup code that executes regardless of whether an exception occurs."],
"answer": "B",
"reason": "In C#, a try block is used to enclose code that might throw an exception. It is typically followed by one or more catch blocks to handle any exceptions that occur."
},
{
"question": "How does the using statement in C# assist in error handling?",
"choices": ["A. It automatically throws exceptions when errors occur in using-blocks.", "B. It imports necessary namespaces that contain error-handling mechanisms.", "C. It ensures that resources are disposed of properly even if an exception occurs.", "D. It bypasses error handling for objects instantiated within its scope."],
"answer": "C",
"reason": "The using statement in C# is used to ensure that resources (like file streams, database connections, etc.) are disposed of properly, even if an exception occurs. It provides a convenient syntax that ensures the correct use of IDisposable objects."
}
],
"Introduction to Object-Oriented Programming": [
{
"question": "What is encapsulation in object-oriented programming?",
"choices": ["A. The process of inheriting properties from another class", "B. The bundling of data and methods that operate on the data within one unit", "C. The ability of different classes to be treated as instances of the same class", "D. Breaking down a program into smaller manageable functions"],
"answer": "B",
"reason": "Encapsulation in object-oriented programming refers to the bundling of data with the methods that operate on that data. It restricts direct access to some of an object's components, which is a means of preventing unintended interference and misuse of the methods and data."
},
{
"question": "Which principle of object-oriented programming involves deriving new classes from existing ones?",
"choices": ["A. Encapsulation", "B. Inheritance", "C. Polymorphism", "D. Abstraction"],
"answer": "B",
"reason": "Inheritance is a fundamental principle of object-oriented programming that involves deriving new classes from existing ones. It allows a class to inherit properties and methods from another class."
},
{
"question": "What is the primary purpose of constructors in object-oriented programming?",
"choices": ["A. To initialize an object's properties when the object is created", "B. To perform clean-up operations when an object is destroyed", "C. To create a blueprint for objects", "D. To provide static methods for class operations"],
"answer": "A",
"reason": "The primary purpose of constructors in object-oriented programming is to initialize an object's properties when the object is created. Constructors prepare a new object for use, often accepting parameters that the constructor uses to set member variables and properties."
},
{
"question": "In object-oriented programming, what is an instance of a class known as?",
"choices": ["A. A method", "B. A variable", "C. A function", "D. An object"],
"answer": "D",
"reason": "In object-oriented programming, an instance of a class is known as an object. An object is a concrete entity based on a class and is created in memory."
},
{
"question": "Which OOP concept involves treating objects of different classes through a common interface?",
"choices": ["A. Encapsulation", "B. Abstraction", "C. Polymorphism", "D. Inheritance"],
"answer": "C",
"reason": "Polymorphism in OOP allows objects of different classes to be treated through a common interface. This concept enables a single interface to represent different underlying forms (data types)."
},
{
"question": "What is the role of abstraction in object-oriented programming?",
"choices": ["A. To exclusively reveal internal workings of a class", "B. To enforce strict data types and structures in a program", "C. To define clear inheritance hierarchies between classes", "D. To simplify the interaction by hiding complex details"],
"answer": "D",
"reason": "Abstraction in OOP simplifies the interaction with objects. It allows focusing on what an object does instead of how it does it by hiding complex implementation details and showing only the necessary features."
},
{
"question": "What is polymorphism in C#?",
"choices": ["A. A class having multiple methods with the same name but different parameters", "B. A method that can operate on objects of different classes", "C. The ability of a class to change its properties at runtime", "D. Creating new classes from existing ones without modifying them"],
"answer": "B",
"reason": "Polymorphism in C# refers to a method's ability to operate on objects of different classes. It allows methods to be written that can work with any object that implements a specific interface or derived class."
},
{
"question": "What is an interface in C#?",
"choices": ["A. A template for creating new objects", "B. A fully implemented base class for others to inherit from", "C. A contract that defines a set of methods and properties a class must implement", "D. A mechanism to hide the implementation details of a class"],
"answer": "C",
"reason": "In C#, an interface is a contract that defines a set of methods and properties that a class must implement. Interfaces specify what a class must do, but not how it does it."
},
{
"question": "Which of the following best describes method overloading?",
"choices": ["A. Defining a method in a subclass that has the same signature as one in the base class", "B. Changing the behavior of a method based on the object it is called on", "C. Providing a new implementation for a method inherited from a base class", "D. Creating multiple methods with the same name but different parameters"],
"answer": "D",
"reason": "The answer is D because method overloading in C# involves creating multiple methods with the same name but different parameters. This allows the same method name to be used for different behaviors or data types, providing flexibility and convenience in programming."
},
{
"question": "How does the override keyword function in C#?",
"choices": ["A. It changes the implementation of a method in the base class.", "B. It provides a subclass-specific implementation of a method defined in the base class.", "C. It requires subclasses to implement a method defined in the base class.", "D. It prevents further overriding of a method in any subsequent subclasses."],
"answer": "B",
"reason": "The answer is B because the 'override' keyword in C# is used to provide a subclass-specific implementation of a method that is already defined in the base class. By using the 'override' keyword, the subclass can customize the behavior of the method while still retaining the same signature as the base class method."
},
{
"question": "In C# where are value types typically stored?",
"choices": ["A. In the stack", "B. In the heap", "C. In the virtual machine", "D. In the global assembly cache"],
"answer": "A",
"reason": "The answer is A because value types in C# are typically stored in the stack. The stack is a region of memory that is used for local variables and function calls. Value types are directly stored in the stack, which provides efficient memory allocation and deallocation."
},
{
"question": "Which of the following is a characteristic of reference types in C#?",
"choices": ["A. They are directly stored in the stack.", "B. They hold the actual data not a reference to it.", "C. They are typically allocated on the heap.", "D. They are passed by value by default."],
"answer": "C",
"reason": "The answer is C because reference types in C# are typically allocated on the heap. Unlike value types, which are directly stored in the stack, reference types store a reference to the actual data on the heap. This allows for dynamic memory allocation and deallocation."
},
{
"question": "When a value type is passed to a method in C#, what happens?",
"choices": [
"A. The method gets a reference to the original variable.",
"B. The original variable is directly modified by the method.",
"C. A new copy of the variable is created and passed to the method.",
"D. The method is unable to modify the original variable."
],
"answer": "C",
"reason": "When a value type is passed to a method in C#, a new copy of the variable is created and passed to the method. This means that any modifications made to the variable within the method will not affect the original variable outside of the method."
},
{
"question": "What happens when a reference type is passed to a method in C#?",
"choices": [
"A. A new copy of the object is created and passed to the method.",
"B. The method gets a direct reference to the original object.",
"C. The method receives a copy of the reference, not the actual object.",
"D. The original object is locked until the method execution is complete."
],
"answer": "B",
"reason": "The answer is B because when a reference type is passed to a method in C#, the method gets a direct reference to the original object. This means that any modifications made to the object within the method will affect the original object outside of the method."
}
],
"Defining Classes": [
{
"question": "Which of the following is a correct way to define a class in C#?",
"choices": ["A. public class MyClass() {}", "B. class public MyClass {}", "C. public MyClass class {}", "D. public class MyClass {}"],
"answer": "D",
"reason": "In C#, a class is correctly defined using the syntax 'public class MyClass {}'. This defines a public class named 'MyClass'."
},
{
"question": "Which of the following correctly declares a class that implements two interfaces in C#?",
"choices": ["A. public class MyClass : Interface1 + Interface2 {}", "B. public class MyClass implements Interface1, Interface2 {}", "C. public class MyClass : Interface1, Interface2 {}", "D. public MyClass class : Interface1, Interface2 {}"],
"answer": "C",
"reason": "In C#, a class that implements two interfaces is declared using the syntax 'public class MyClass : Interface1, Interface2'. The class must provide implementations for all the members defined in both interfaces."
},
{
"question": "In C# how do you ensure a class member is only accessible within the class itself and not by derived classes or other parts of the program?",
"choices": ["A. Use the public modifier", "B. Use the protected modifier", "C. Use the private modifier", "D. Use the internal modifier"],
"answer": "C",
"reason": "In C#, the 'private' modifier is used to ensure that a class member is only accessible within the class itself. It cannot be accessed by derived classes or other parts of the program."
},
{
"question": "What is the purpose of an abstract class in C#?",
"choices": ["A. To act as a base class for other classes and provide a common definition of a base type", "B. To provide a complete implementation for all methods defined in it", "C. To enforce that derived classes implement specific methods but not to provide any default implementation", "D. To create instances directly from it"],
"answer": "A",
"reason": "In C#, an abstract class serves the purpose of acting as a base class for other classes. It provides a common definition and a shared base of properties and methods that derived classes can inherit."
},
{
"question": "Which of these statements is true about interfaces in C#?",
"choices": ["A. Interfaces can contain static methods.", "B. Interfaces can have fields with default values.", "C. Interfaces can contain constructors.", "D. An interface can extend another interface."],
"answer": "D",
"reason": "In C#, an interface can extend another interface, allowing it to inherit the method signatures from the parent interface. This enables the creation of layered abstractions."
},
{
"question": "What does the protected keyword in C# signify?",
"choices": ["A. The member can be accessed by any code in the same assembly", "B. The member is accessible only within its class and by derived class instances", "C. The member can be accessed by any code in the same class or struct", "D. The member is not accessible from any code"],
"answer": "B",
"reason": "The 'protected' keyword in C# signifies that the class member is accessible within its own class and by derived class instances. It is a way to ensure controlled access in inheritance hierarchies."
},
{
"question": "Which keyword in C# is used to prevent a class from being inherited?",
"choices": ["A. static", "B. sealed", "C. final", "D. readonly"],
"answer": "B",
"reason": "The 'sealed' keyword in C# is used to prevent a class from being inherited. When a class is sealed, it cannot be extended, and no class can inherit from it."
},
{
"question": "Which statement is true about interfaces in C#?",
"choices": ["A. Interfaces can contain implementation of methods.", "B. Interfaces can contain fields.", "C. Interfaces cannot contain properties.", "D. Interfaces define a contract and contain only method declarations."],
"answer": "D",
"reason": "The answer is D because interfaces in C# define a contract and contain only method declarations. They do not contain any implementation details. Interfaces provide a way to enforce a specific set of methods that a class implementing the interface must define."
},
{
"question": "What is a key difference between an abstract class and an interface in C#?",
"choices": [
"A. An abstract class can contain implementation details.",
"B. An interface can inherit from multiple other interfaces but an abstract class cannot.",
"C. An abstract class cannot contain abstract methods.",
"D. Interfaces are used to define properties while abstract classes are not."
],
"answer": "A",
"reason": "The answer is A because an abstract class can contain implementation details. Unlike interfaces, abstract classes can have method implementations, fields, properties, and other members with defined behavior. This allows abstract classes to provide a partial implementation of a class while leaving some methods or properties to be implemented by derived classes."
},
{
"question": "What is a struct in C#?",
"choices": [
"A. A reference type used to define a light-weight object",
"B. A value type used to encapsulate data and related functionality",
"C. A type used to define enumeration values",
"D. A type used to manage collections of other types"
],
"answer": "B",
"reason": "The answer is B because a struct in C# is a value type used to encapsulate data and related functionality. Unlike reference types, structs are stored on the stack and are suitable for small lightweight objects. They are commonly used for representing simple data structures."
},
{
"question": "Which statement is true about structs in C#?",
"choices": ["A. Structs can be inherited from other structs or classes.", "B. Structs are allocated on the heap.", "C. Structs are suitable for small lightweight objects.", "D. Structs can have parameterless constructors."],
"answer": "C",
"reason": "The answer is C because structs in C# are suitable for small lightweight objects. Unlike reference types, structs are stored on the stack and are commonly used for representing simple data structures. They are efficient and provide better performance for small objects."
}
],
"Defining Class Members": [
{
"question": "What is a class member in C#?",
"choices": ["A. A method or property defined within a class", "B. An instance of a class", "C. A reference to another class", "D. The name of a class"],
"answer": "A",
"reason": "In C#, a class member refers to a method or property defined within a class. These members can include methods, properties, fields, events, and more."
},
{
"question": "In C# what is the effect of marking a class member with the static keyword?",
"choices": ["A. The member belongs to the class itself rather than to any specific instance.", "B. The member is hidden from other classes and only accessible within its own class.", "C. The member can be overridden in a subclass.", "D. The member is automatically private and cannot be accessed outside the class."],
"answer": "A",
"reason": "Marking a class member with the 'static' keyword in C# means that the member belongs to the class itself rather than to any specific instance of the class. It can be accessed directly through the class name."
},
{
"question": "What is the purpose of a property in a C# class?",
"choices": ["A. To define a method that is automatically called when an instance is created.", "B. To provide a mechanism to read, write, or compute private fields.", "C. To declare a field that can store data.", "D. To link two classes together."],
"answer": "B",
"reason": "In C#, a property is used to provide a mechanism to read, write, or compute the value of private fields. Properties offer a level of abstraction, allowing controlled access to the fields of a class."
},
{
"question": "How do you prevent a method from being overridden in a derived class in C#?",
"choices": ["A. Declare the method as private", "B. Declare the class as sealed", "C. Declare the method as static", "D. Declare the method as sealed"],
"answer": "D",
"reason": "In C#, declaring a method as 'sealed' prevents it from being overridden in any derived class. This is used to restrict the method from being further modified in the inheritance hierarchy."
},
{
"question": "What is the purpose of the virtual keyword in C#?",
"choices": ["A. To force subclasses to override a method", "B. To allow a method to be overridden in a subclass", "C. To define a method that cannot be implemented", "D. To define a method that must be overridden"],
"answer": "B",
"reason": "The 'virtual' keyword in C# is used to allow a method to be overridden in a subclass. This enables a method to have different implementations in different derived classes."
},
{
"question": "What is a nested class in C#?",
"choices": ["A. A class defined within another class", "B. A class derived from another class", "C. A class that can only be instantiated once", "D. A class used to store data"],
"answer": "A",
"reason": "A nested class in C# is a class defined within another class. The nested class has access to the members of the enclosing class and is typically used for organizational purposes."
},
{
"question": "What is the default accessibility of a nested class in C#?",
"choices": ["A. public", "B. private", "C. protected", "D. internal"],
"answer": "B",
"reason": "In C#, the default accessibility of a nested class is 'private'. This means that it is accessible only within the enclosing class."
},
{
"question": "What must a class in C# do when it implements an interface?",
"choices": ["A. Override all methods in the interface", "B. Declare itself as abstract", "C. Implement all methods and properties defined in the interface", "D. Declare the interface methods as virtual"],
"answer": "C",
"reason": "In C#, when a class implements an interface, it must provide an implementation for all the methods and properties defined in the interface. This is a requirement of the language to ensure type safety and consistency."
},
{
"question": "Can a class in C# implement multiple interfaces?",
"choices": ["A. Yes, but only if they are related", "B. No, a class can implement only one interface", "C. Yes, a class can implement any number of interfaces", "D. Yes, but only if the interfaces do not have conflicting methods"],
"answer": "C",
"reason": "In C#, a class can implement multiple interfaces regardless of whether they are related or not. This is a feature of the language that allows for a form of multiple inheritance, where a class can have behavior from multiple sources."
},
{
"question": "What is a partial class in C#?",
"choices": ["A. A class that is not fully implemented", "B. A class that can only be partially inherited", "C. A class whose definition is split across multiple files", "D. A class that can only have partial methods"],
"answer": "C",
"reason": "A partial class in C# is a class whose definition can be split across multiple files. This can be useful for organizing large classes or for working with automatically generated code."
},
{
"question": "What is a key benefit of using partial classes in C#?",
"choices": ["A. Increased performance of the application", "B. Allowing multiple developers to work on the same class simultaneously", "C. Reducing the memory usage of the application", "D. Allowing classes to inherit from multiple base classes"],
"answer": "B",
"reason": "One of the key benefits of using partial classes in C# is that it allows multiple developers to work on the same class simultaneously. By splitting the class definition across multiple files, developers can work on different parts of the class without causing merge conflicts."
},
{
"question": "In C# a field is typically:",
"choices": ["A. A variable declared within a class for storing data.", "B. A method within a class used to control access to data.", "C. The same as a property with no specific difference.", "D. A structure within a class used to define complex data types."],
"answer": "A",
"reason": "In C#, a field is typically a variable that is declared within a class for storing data. It represents the state or data of the object."
},
{
"question": "Choose the statement that best describes a property in C# compared to a field:",
"choices": ["A. Properties are identical to fields but are used only in advanced programming scenarios.","B. Properties unlike fields provide a flexible mechanism to read, write, or compute values.", "C. Properties are older features in C# and are now replaced by fields.","D. Properties and fields are both used to store data but properties cannot have access modifiers."],
"answer": "B",
"reason": "Properties in C# provide a flexible mechanism to read, write, or compute values. They are used to expose and control access to the fields in a class, allowing for data validation and encapsulation."
}
],
"Collections Comparisons and Conversions": [
{
"question": "What is a List<T> in C#?",
"choices": ["A. A fixed-size collection of items", "B. A dynamic collection of items of the same type", "C. A collection of key-value pairs", "D. A collection that allows duplicate keys"],
"answer": "B",
"reason": "In C#, 'List<T>' represents a dynamic collection of items of the same type. It is a generic collection that can grow in size dynamically."
},
{
"question": "Which C# collection type is First-In-First-Out (FIFO)?",
"choices": ["A. List<T>", "B. Queue<T>", "C. Stack<T>", "D. Dictionary<TKey, TValue>"],
"answer": "B",
"reason": "The 'Queue<T>' collection type in C# is a First-In-First-Out (FIFO) collection. Items are removed from the collection in the same order they were added."
},
{
"question": "What is the characteristic behavior of a Stack<T> collection in C#?",
"choices": ["A. Last-In-First-Out (LIFO)", "B. First-In-First-Out (FIFO)", "C. Random access to elements", "D. Key-value pair storage"],
"answer": "A",
"reason": "A 'Stack<T>' in C# operates on a Last-In-First-Out (LIFO) principle, meaning the last item added is the first one to be removed."
},
{
"question": "Which collection should be used when you need to access elements by unique keys in C#?",
"choices": ["A. List<T>", "B. Dictionary<TKey, TValue>", "C. HashSet<T>", "D. Array"],
"answer": "B",
"reason": "A 'Dictionary<TKey, TValue>' in C# is used for storing key-value pairs, allowing you to access elements by unique keys."
},
{
"question": "After executing the following code, what will be the value of firstPrice?\n\nQueue<double> prices = new();\nprices.Enqueue(19.99);\nprices.Enqueue(29.99);\ndouble firstPrice = prices.Dequeue();",
"choices": ["A. null", "B. 0.0", "C. 29.99", "D. 19.99"],
"answer": "D",
"reason": "The 'Queue<T>' collection in C# follows a FIFO (First-In-First-Out) method. Since 19.99 is enqueued first, it will be the first to be dequeued."
},
{
"question": "For a collection defined as Dictionary<string, int> ages, which statement is true for adding a new key/value pair?",
"choices": ["A. ages.Add('Dave', 35);", "B. ages['Dave'] = 35;", "C. Both A and B", "D. Neither A nor B"],
"answer": "C",
"reason": "In a 'Dictionary<TKey, TValue>' in C#, new key/value pairs can be added either using the 'Add' method or by setting the value with an indexer. Both A and B are correct methods."
},
{
"question": "If you need a dynamically sized collection for storing elements of different types and access them by index, which one would you choose?",
"choices": ["A. List<T>", "B. ArrayList", "C. Queue<T>", "D. HashSet<T>"],
"answer": "B",
"reason": "An 'ArrayList' in C# is suitable for storing elements of different types and allows access to elements by index. It is dynamically sized."
},
{
"question": "In which collection will the Add method refuse to insert a duplicate element?",
"choices": ["A. List<T>", "B. Queue<T>", "C. HashSet<T>", "D. Dictionary<TKey TValue>"],
"answer": "C",
"reason": "HashSet<T> in C# is designed to ensure that all elements are unique. If you try to add a duplicate element, it will refuse to insert it."
},
{
"question": "What is a characteristic of a HashSet<T> in C#?",
"choices": ["A. It maintains elements in a sorted order.", "B. It ensures that each element is unique.", "C. It allows for indexing elements.", "D. It pairs keys to values."],
"answer": "B",
"reason": "HashSet<T> in C# ensures that each element is unique. This is the primary characteristic that differentiates it from other collection types."
},
{
"question": "What does the 'is' operator do in C#?",
"choices": ["A. Compares two objects for equality", "B. Checks if an object is of a specific type", "C. Concatenates two strings", "D. Converts an object to a specific type"],
"answer": "B",
"reason": "The 'is' operator in C# is used to check if an object is of a specific type. It returns true if the object is of the specified type, and false otherwise."
},
{
"question": "What is operator overloading in C#?",
"choices": ["A. Changing the way built-in operators work for all data types", "B. Allowing a class to define its own behavior for standard operators", "C. Using multiple operators in a single operation", "D. Comparing two or more values using relational operators"],
"answer": "B",
"reason": "Operator overloading in C# allows a class to define its own behavior for standard operators. This means you can redefine how operators like +, -, *, / etc. work for your custom types."
},
{
"question": "What is an implicit conversion in C#?",
"choices": ["A. A conversion that needs to be explicitly defined in the code", "B. A conversion that happens automatically without data loss", "C. A conversion that can only be done between similar types", "D. A conversion that requires a cast operator"],
"answer": "B",
"reason": "An implicit conversion in C# happens automatically when the compiler can guarantee that there will be no data loss. For example, converting an int to a long can be done implicitly because a long can hold all possible values of an int."
},
{
"question": "What is the purpose of the 'as' operator in C#?",
"choices": ["A. To check the compatibility of types at compile-time", "B. To safely cast to a type, returning null if the cast fails", "C. To forcefully convert one type to another", "D. To compare two objects for equality"],
"answer": "B",
"reason": "The 'as' operator in C# is used to safely cast to a type. If the cast is not possible, it returns null instead of throwing an exception."
},
{
"question": "How does the 'as' operator differ from a direct cast in C#?",
"choices": ["A. The 'as' operator throws an exception if the cast is unsuccessful.", "B. The 'as' operator performs a deeper conversion between unrelated types.", "C. A direct cast can change the actual type of the object.", "D. The 'as' operator returns null for an invalid cast while a direct cast throws an exception."],
"answer": "D",
"reason": "The 'as' operator differs from a direct cast in that it returns null if the cast is not possible, while a direct cast throws an InvalidCastException if the cast is not possible."
}
],
"Files": [
{
"question": "Which class in C# is used to manipulate directories and subdirectories?",
"choices": ["A. FileStream", "B. Path", "C. Directory", "D. Folder"],
"answer": "C",
"reason": "The 'Directory' class in C# is specifically designed to create, move, and enumerate through directories and subdirectories, making it the appropriate choice for these operations."
},
{
"question": "Which method would you use to write a string to a file in C#, creating the file if it doesn't exist?",
"choices": ["A. File.AppendText()", "B. File.WriteAllText()", "C. File.Write()", "D. File.CreateText()"],
"answer": "B",
"reason": "The 'File.WriteAllText()' method in C# writes a specified string to a file, creating the file if it does not already exist, or overwriting it if it does."
},
{
"question": "What class in C# is used to watch for changes in a file system?",
"choices": ["A. FileSystemWatcher", "B. FileObserver", "C. DirectoryMonitor", "D. FileScanner"],
"answer": "A",
"reason": "The 'FileSystemWatcher' class in C# is designed to listen to the file system change notifications and raise events when a directory, or files in a directory, change."
},
{
"question": "How can you monitor a directory for changes to files and subdirectories in C#?",
"choices": ["A. Use the FileWatcher class and set appropriate properties", "B. Implement polling using the Directory class", "C. Utilize FileSystemWatcher and subscribe to events", "D. Use File.Open() with a special mode"],
"answer": "C",
"reason": "To monitor changes to files and subdirectories in a directory in C#, you should utilize the 'FileSystemWatcher' class and subscribe to its events, such as Changed, Created, Deleted, or Renamed."
},
{
"question": "Which method in the Directory class is used to create a new directory?",
"choices": ["A. Directory.CreateDirectory(string path)", "B. Directory.NewFolder(string path)", "C. Directory.MakeDirectory(string path)", "D. Directory.Create(string path)"],
"answer": "A",
"reason": "The 'Directory.CreateDirectory(string path)' method in C# is used to create a new directory at the specified path. If the directory already exists, this method does nothing."
},
{
"question": "What is the purpose of a Stream in .NET?",
"choices": ["A. To compress files", "B. To provide a way to read and write bytes to storage", "C. To monitor changes in files and directories", "D. To serialize objects"],
"answer": "B",
"reason": "In .NET, a 'Stream' provides a generic view of a sequence of bytes, which is primarily used for the input and output of data (reading and writing bytes) to and from storage mediums like files, memory, etc."
},
{
"question": "Which class is used to monitor changes in a file system?",
"choices": ["A. FileObserver", "B. FileMonitor", "C. FileWatcher", "D. FileSystemWatcher"],
"answer": "D",
"reason": "The 'FileSystemWatcher' class in C# is utilized for monitoring changes in the file system. It can notify about file and directory changes like creation, deletion, modification, and renaming."
},
{
"question": "Why is it important to close a Stream after using it?",
"choices": ["A. To release memory resources.", "B. To ensure data is written to the file.", "C. To prevent memory leaks and file locks.", "D. To improve performance for subsequent operations."],
"answer": "C",
"reason": "Closing a Stream in .NET is crucial to prevent memory leaks and file locks. It ensures the proper release of resources and that any buffered data is written to the underlying storage."
}
]
}