SlideShare a Scribd company logo
Abed El-Azeem Bukhari (MCPD,MCTS and MCP) el-bukhari.com
Objects  & Types What’s in This Chapter? -The differences between classes and structs - Class members - Passing values by value and by reference - Method overloading - Constructors and static constructors - Read-only fields - Partial classes - Static classes - The Object class, from which all other types are derived
Classes and Structs class PhoneCustomer { public const string DayOfSendingBill = "Monday"; public int CustomerID; public string FirstName; public string LastName; } struct PhoneCustomerStruct { public const string DayOfSendingBill = "Monday"; public int CustomerID; public string FirstName; public string LastName; } PhoneCustomer   myCustomer =  new   PhoneCustomer (); // works for a class PhoneCustomerStruct   myCustomer2 =  new   PhoneCustomerStruct ();// works for a struct
Classes -  Class Members Data Members, Function Members 1-  Data Members : fields , constants, events Can be static. Fields: variables associated with class. PhoneCustomer Customer1 = new PhoneCustomer(); Customer1.FirstName = “Ahmad"; Constants : associated with the classes as other variables. public const string DayOfSendingBill = "Monday"; Events : allow the object to tell the caller if something happen. Eg: Like changing the value of a field or a property . It used to interact with the user.   The client can have a code called “event handler” which interact with the events We will study events , Delegates and Lambda later at this course.
Classes -  Class Members (cont) 1-  Function Members : There are :  methods, properties, constructors, finalizers, operators and indexers. Properties  : group of functions we can deal with it as same as public fields. Properties have its own design that use :  get  and  set  classes whit their work. Constructors :  special functions that called automatically when we create an instance for the class . Constructors usually used for initializing  the objects in the class. It can’t have any return type ! Finalizers :  same as constructors but it called when CLR see that this object is no longer needed. Finalizers   preceded by a tilde (~). We can’t know the exactly time when the finalizers   where called.
Classes -  Class Members (cont) Operators  : do operator overloading indexers:  allow to index your objects as an array or a collection.
Classes –  Declaring a Method [ modifiers ]  return_type   MethodName ([parameters]) { //  Method body } Ex: public bool IsSquare(Rectangle rect) { return (rect.Height == rect.Width); } Ex: many returns public bool IsPositive(int value) { if (value < 0) return false; return true; }
Classes –  Invoking Methods MathTesting.cs on Visual Studio 2010 Demo
Classes –  Passing Parameters to Methods ParametersTesting.cs  on Visual Studio 2010 Demo
Classes –  ref Parameters static void SomeFunction(int[] ints, ref int i) { ints[0] = 100; i = 100; // The change to i will persist after SomeFunction() exits. } You will also need to add the ref keyword when you invoke the method: SomeFunction(ints, ref i);. Finally, it is also important to understand that C# continues to apply initialization requirements to parameters passed to methods. Any variable must be initialized before it is passed into a method, whether it is passed in by value or by reference.
Classes –  out Parameters static void SomeFunction(out int i) { i = 100; } public static int Main() { int i; // note how i is declared but not initialized. SomeFunction(out i); Console.WriteLine(i); return 0; }
Classes –  Named Arguments string FullName(string firstName, string lastName) { return firstName + &quot; &quot; + lastName; } The following method calls will return the same full name: FullName(“Abed&quot;, “Bukhari&quot;); FullName(lastName: “Bukhari&quot;, firstName: “Abed&quot;);
Classes –  Optional Arguments incorrect: void TestMethod(int optionalNumber = 10, int notOptionalNumber) { System.Console.Write(optionalNumber + notOptionalNumber); } For this method to work, the  optionalNumber  parameter would have to be defined  last . Correct : void TestMethod(int notOptionalNumber, int optionalNumber = 10) { System.Console.Write(optionalNumber + notOptionalNumber); }
Classes –  Method Overloading class ResultDisplayer { void DisplayResult(string result) { // implementation } void DisplayResult(int result) { // implementation } } - It is not sufficient for two methods to differ only in their return type. - It is not sufficient for two methods to differ only by  virtue of a parameter having been declared as ref or out.
Classes –  Method Overloading cont If optional parameters won’t work for you, then you need to use method overloading to achieve the same effect: class MyClass { int DoSomething(int x) // want 2nd parameter with default value 10 { DoSomething(x, 10); } int DoSomething(int x, int y) { // implementation } }
Classes –  Properties // mainForm is of type System.Windows.Forms mainForm.Height = 400; To define a property in C#, you use the following syntax: public string SomeProperty { get { return &quot;This is the property value.&quot;; } set { // do whatever needs to be done to set the property. } }
Classes –  Properties cont. private int age; public int Age { get { return age; } set { age = value; } }
Classes –  Read-Only and Write-Only Properties private string name; public string Name { get { return Name; } }
Classes –  Access Modifiers for Properties public string Name { get { return _name; } private set { _name = value; } }
Classes –  Auto - Implemented Properties public string Age {get; set;} The declaration private int age; is not needed. The compiler will create this automatically. By using auto - implemented properties, validation of the property cannot be done at the property set. So in the previous example we could not have checked to see if an invalid age is set. Also, both accessors must be present. So an attempt to make a property read - only would cause an error: public string Age {get;} However, the access level of each accessor can be different. So the following is acceptable: public string Age {get; private set;}
Classes –  Constructors public class MyClass { public MyClass() { } // rest of class definition // overloads: public MyClass() // zeroparameter constructor { // construction code } public MyClass(int number) // another overload { // construction code }
Classes –  Constructors cont. public class MyNumber { private int number; public MyNumber(int number) { this.number = number; } } This code also illustrates typical use of the this keyword to distinguish member fields from parameters of the same name. If you now try instantiating a MyNumber object using a no-parameter constructor, you will get a compilation error: MyNumber numb = new MyNumber(); // causes compilation error
Classes –  Constructors cont. We should mention that it is possible to define constructors as private or protected, so that they are invisible to code in unrelated classes too: public class MyNumber { private int number; private MyNumber(int number) // another overload { this.number = number; } } // Notes - If your class serves only as a container for some static members or properties and  therefore should never be instantiated - If you want the class to only ever be instantiated by calling some static member function (this is the so-called class factory approach to object instantiation)
Classes –  Static Constructors class MyClass { static MyClass() { // initialization code } // rest of class definition }
Classes –  Static Constructors cont namespace Najah.ProCSharp.StaticConstructorSample { public class UserPreferences { public static readonly Color BackColor; static UserPreferences() { DateTime now = DateTime.Now; if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday) BackColor = Color.Green; else BackColor = Color.Red; } private UserPreferences() { } }}
Classes –  Static Constructors cont class MainEntryPoint { static void Main(string[] args) { Console.WriteLine(&quot;User-preferences: BackColor is: &quot; + UserPreferences.BackColor.ToString()); } } Compiling and running this code results in this output: User-preferences: BackColor is: Color [Red]
Classes –  Calling Constructors from Other Constructors class Car { private string description; private uint nWheels; public Car(string description, uint nWheels) { this.description = description; this.nWheels = nWheels; } public Car(string description) { this.description = description; this.nWheels = 4; } // etc.
Classes –  Calling Constructors from Other Constructors cont class Car { private string description; private uint nWheels; public Car(string description, uint nWheels) { this.description = description; this.nWheels = nWheels; } public Car(string description): this(description, 4) { } // etc
Classes –  Calling Constructors from Other Constructors cont class Car { private string description; private uint nWheels; public Car(string description, uint nWheels) { this.description = description; this.nWheels = nWheels; } public Car(string description): this(description, 4) { } // etc Car myCar = new Car(&quot;Proton Persona&quot;);
Classes –  readonly fields public class DocumentEditor { public static readonly uint MaxDocuments; static DocumentEditor() { MaxDocuments = DoSomethingToFindOutMaxNumber(); } }
Classes –  readonly fields cont. public class Document { public readonly DateTime CreationDate; public Document() { // Read in creation date from file. Assume result is 1 Jan 2002 // but in general this can be different for different instances // of the class CreationDate = new DateTime(2002, 1, 1); } } CreationDate and MaxDocuments in the previous code snippet are treated like any other field, except that because they are read-only, they cannot be assigned outside the constructors: void SomeMethod() { MaxDocuments = 10; // compilation error here. MaxDocuments is readonly }
Anonymous Types Types without names : var captain = new {FirstName = “Ahmad&quot;, MiddleName = “M&quot;, LastName = “Test&quot;};
Thanks For Attending Abed El-Azeem Bukhari (MCPD,MCTS and MCP) el-bukhari.com

More Related Content

PPT
Constructors and destructors in C++ part 2
PPTX
Class and object
PPTX
Interfaces in JAVA !! why??
PPS
Interface
PPTX
Polymorphism
DOCX
JAVA Notes - All major concepts covered with examples
PDF
PDF
Java reflection
Constructors and destructors in C++ part 2
Class and object
Interfaces in JAVA !! why??
Interface
Polymorphism
JAVA Notes - All major concepts covered with examples
Java reflection

What's hot (20)

PPT
Java Reflection
PDF
Inheritance
PPT
Java interfaces & abstract classes
PPTX
Inheritance
DOC
04cpp inh
PPTX
Java Reflection Concept and Working
PPS
Inheritance chepter 7
PPT
Reflection
PPTX
C# classes objects
PPTX
Abstract & Interface
PPT
Reflection in java
PPT
Object Oriented Programming with Java
PPT
Java: Inheritance
PDF
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
PDF
Advanced Reflection in Java
PPTX
OBJECT ORIENTED PROGRAMING IN C++
PPT
Inheritance
PPT
Java interfaces
PPT
Java interface
DOCX
Core java notes with examples
Java Reflection
Inheritance
Java interfaces & abstract classes
Inheritance
04cpp inh
Java Reflection Concept and Working
Inheritance chepter 7
Reflection
C# classes objects
Abstract & Interface
Reflection in java
Object Oriented Programming with Java
Java: Inheritance
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
Advanced Reflection in Java
OBJECT ORIENTED PROGRAMING IN C++
Inheritance
Java interfaces
Java interface
Core java notes with examples
Ad

Viewers also liked (7)

PPT
Airindia
DOCX
Proyecto de investigacion
DOC
Vygostky and the education of infants and toddlers
PDF
Ozone mobile media
PPT
Csharp4 arrays and_tuples
PPT
Csharp4 delegates lambda_and_events
DOC
Gobernacion sonsonate
Airindia
Proyecto de investigacion
Vygostky and the education of infants and toddlers
Ozone mobile media
Csharp4 arrays and_tuples
Csharp4 delegates lambda_and_events
Gobernacion sonsonate
Ad

Similar to Csharp4 objects and_types (20)

PPT
Chapter 4 - Defining Your Own Classes - Part I
PPT
Java căn bản - Chapter4
PPTX
Lecture-Midterm .pptx
DOCX
OOP and C++Classes
PDF
Implementing one feature set in two JavaScript engines (Web Engines Hackfest ...
PPT
Defining classes-and-objects-1.0
PPT
9781439035665 ppt ch08
PDF
Lecture 5
PDF
22 scheme OOPs with C++ BCS306B_module2.pdfmodule2.pdf
PDF
classes and objects.pdfggggggggffffffffgggf
PPT
Csharp4 inheritance
PPT
Advanced c#
PPT
14. Defining Classes
PDF
Java Programming - 04 object oriented in java
PDF
Java Basic day-2
PPT
java tutorial 3
PPTX
05 Object Oriented Concept Presentation.pptx
PPTX
C++ppt. Classs and object, class and object
PPTX
classes object fgfhdfgfdgfgfgfgfdoop.pptx
PPT
Unidad o informatica en ingles
Chapter 4 - Defining Your Own Classes - Part I
Java căn bản - Chapter4
Lecture-Midterm .pptx
OOP and C++Classes
Implementing one feature set in two JavaScript engines (Web Engines Hackfest ...
Defining classes-and-objects-1.0
9781439035665 ppt ch08
Lecture 5
22 scheme OOPs with C++ BCS306B_module2.pdfmodule2.pdf
classes and objects.pdfggggggggffffffffgggf
Csharp4 inheritance
Advanced c#
14. Defining Classes
Java Programming - 04 object oriented in java
Java Basic day-2
java tutorial 3
05 Object Oriented Concept Presentation.pptx
C++ppt. Classs and object, class and object
classes object fgfhdfgfdgfgfgfgfdoop.pptx
Unidad o informatica en ingles

Recently uploaded (20)

PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Cloud computing and distributed systems.
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
A Presentation on Artificial Intelligence
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
KodekX | Application Modernization Development
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Building Integrated photovoltaic BIPV_UPV.pdf
cuic standard and advanced reporting.pdf
Empathic Computing: Creating Shared Understanding
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Cloud computing and distributed systems.
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
A Presentation on Artificial Intelligence
“AI and Expert System Decision Support & Business Intelligence Systems”
KodekX | Application Modernization Development
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Per capita expenditure prediction using model stacking based on satellite ima...
Network Security Unit 5.pdf for BCA BBA.
NewMind AI Weekly Chronicles - August'25 Week I
Diabetes mellitus diagnosis method based random forest with bat algorithm
NewMind AI Monthly Chronicles - July 2025
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Dropbox Q2 2025 Financial Results & Investor Presentation
Reach Out and Touch Someone: Haptics and Empathic Computing

Csharp4 objects and_types

  • 1. Abed El-Azeem Bukhari (MCPD,MCTS and MCP) el-bukhari.com
  • 2. Objects & Types What’s in This Chapter? -The differences between classes and structs - Class members - Passing values by value and by reference - Method overloading - Constructors and static constructors - Read-only fields - Partial classes - Static classes - The Object class, from which all other types are derived
  • 3. Classes and Structs class PhoneCustomer { public const string DayOfSendingBill = &quot;Monday&quot;; public int CustomerID; public string FirstName; public string LastName; } struct PhoneCustomerStruct { public const string DayOfSendingBill = &quot;Monday&quot;; public int CustomerID; public string FirstName; public string LastName; } PhoneCustomer myCustomer = new PhoneCustomer (); // works for a class PhoneCustomerStruct myCustomer2 = new PhoneCustomerStruct ();// works for a struct
  • 4. Classes - Class Members Data Members, Function Members 1- Data Members : fields , constants, events Can be static. Fields: variables associated with class. PhoneCustomer Customer1 = new PhoneCustomer(); Customer1.FirstName = “Ahmad&quot;; Constants : associated with the classes as other variables. public const string DayOfSendingBill = &quot;Monday&quot;; Events : allow the object to tell the caller if something happen. Eg: Like changing the value of a field or a property . It used to interact with the user. The client can have a code called “event handler” which interact with the events We will study events , Delegates and Lambda later at this course.
  • 5. Classes - Class Members (cont) 1- Function Members : There are : methods, properties, constructors, finalizers, operators and indexers. Properties : group of functions we can deal with it as same as public fields. Properties have its own design that use : get and set classes whit their work. Constructors : special functions that called automatically when we create an instance for the class . Constructors usually used for initializing the objects in the class. It can’t have any return type ! Finalizers : same as constructors but it called when CLR see that this object is no longer needed. Finalizers preceded by a tilde (~). We can’t know the exactly time when the finalizers where called.
  • 6. Classes - Class Members (cont) Operators : do operator overloading indexers: allow to index your objects as an array or a collection.
  • 7. Classes – Declaring a Method [ modifiers ] return_type MethodName ([parameters]) { // Method body } Ex: public bool IsSquare(Rectangle rect) { return (rect.Height == rect.Width); } Ex: many returns public bool IsPositive(int value) { if (value < 0) return false; return true; }
  • 8. Classes – Invoking Methods MathTesting.cs on Visual Studio 2010 Demo
  • 9. Classes – Passing Parameters to Methods ParametersTesting.cs on Visual Studio 2010 Demo
  • 10. Classes – ref Parameters static void SomeFunction(int[] ints, ref int i) { ints[0] = 100; i = 100; // The change to i will persist after SomeFunction() exits. } You will also need to add the ref keyword when you invoke the method: SomeFunction(ints, ref i);. Finally, it is also important to understand that C# continues to apply initialization requirements to parameters passed to methods. Any variable must be initialized before it is passed into a method, whether it is passed in by value or by reference.
  • 11. Classes – out Parameters static void SomeFunction(out int i) { i = 100; } public static int Main() { int i; // note how i is declared but not initialized. SomeFunction(out i); Console.WriteLine(i); return 0; }
  • 12. Classes – Named Arguments string FullName(string firstName, string lastName) { return firstName + &quot; &quot; + lastName; } The following method calls will return the same full name: FullName(“Abed&quot;, “Bukhari&quot;); FullName(lastName: “Bukhari&quot;, firstName: “Abed&quot;);
  • 13. Classes – Optional Arguments incorrect: void TestMethod(int optionalNumber = 10, int notOptionalNumber) { System.Console.Write(optionalNumber + notOptionalNumber); } For this method to work, the optionalNumber parameter would have to be defined last . Correct : void TestMethod(int notOptionalNumber, int optionalNumber = 10) { System.Console.Write(optionalNumber + notOptionalNumber); }
  • 14. Classes – Method Overloading class ResultDisplayer { void DisplayResult(string result) { // implementation } void DisplayResult(int result) { // implementation } } - It is not sufficient for two methods to differ only in their return type. - It is not sufficient for two methods to differ only by virtue of a parameter having been declared as ref or out.
  • 15. Classes – Method Overloading cont If optional parameters won’t work for you, then you need to use method overloading to achieve the same effect: class MyClass { int DoSomething(int x) // want 2nd parameter with default value 10 { DoSomething(x, 10); } int DoSomething(int x, int y) { // implementation } }
  • 16. Classes – Properties // mainForm is of type System.Windows.Forms mainForm.Height = 400; To define a property in C#, you use the following syntax: public string SomeProperty { get { return &quot;This is the property value.&quot;; } set { // do whatever needs to be done to set the property. } }
  • 17. Classes – Properties cont. private int age; public int Age { get { return age; } set { age = value; } }
  • 18. Classes – Read-Only and Write-Only Properties private string name; public string Name { get { return Name; } }
  • 19. Classes – Access Modifiers for Properties public string Name { get { return _name; } private set { _name = value; } }
  • 20. Classes – Auto - Implemented Properties public string Age {get; set;} The declaration private int age; is not needed. The compiler will create this automatically. By using auto - implemented properties, validation of the property cannot be done at the property set. So in the previous example we could not have checked to see if an invalid age is set. Also, both accessors must be present. So an attempt to make a property read - only would cause an error: public string Age {get;} However, the access level of each accessor can be different. So the following is acceptable: public string Age {get; private set;}
  • 21. Classes – Constructors public class MyClass { public MyClass() { } // rest of class definition // overloads: public MyClass() // zeroparameter constructor { // construction code } public MyClass(int number) // another overload { // construction code }
  • 22. Classes – Constructors cont. public class MyNumber { private int number; public MyNumber(int number) { this.number = number; } } This code also illustrates typical use of the this keyword to distinguish member fields from parameters of the same name. If you now try instantiating a MyNumber object using a no-parameter constructor, you will get a compilation error: MyNumber numb = new MyNumber(); // causes compilation error
  • 23. Classes – Constructors cont. We should mention that it is possible to define constructors as private or protected, so that they are invisible to code in unrelated classes too: public class MyNumber { private int number; private MyNumber(int number) // another overload { this.number = number; } } // Notes - If your class serves only as a container for some static members or properties and therefore should never be instantiated - If you want the class to only ever be instantiated by calling some static member function (this is the so-called class factory approach to object instantiation)
  • 24. Classes – Static Constructors class MyClass { static MyClass() { // initialization code } // rest of class definition }
  • 25. Classes – Static Constructors cont namespace Najah.ProCSharp.StaticConstructorSample { public class UserPreferences { public static readonly Color BackColor; static UserPreferences() { DateTime now = DateTime.Now; if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday) BackColor = Color.Green; else BackColor = Color.Red; } private UserPreferences() { } }}
  • 26. Classes – Static Constructors cont class MainEntryPoint { static void Main(string[] args) { Console.WriteLine(&quot;User-preferences: BackColor is: &quot; + UserPreferences.BackColor.ToString()); } } Compiling and running this code results in this output: User-preferences: BackColor is: Color [Red]
  • 27. Classes – Calling Constructors from Other Constructors class Car { private string description; private uint nWheels; public Car(string description, uint nWheels) { this.description = description; this.nWheels = nWheels; } public Car(string description) { this.description = description; this.nWheels = 4; } // etc.
  • 28. Classes – Calling Constructors from Other Constructors cont class Car { private string description; private uint nWheels; public Car(string description, uint nWheels) { this.description = description; this.nWheels = nWheels; } public Car(string description): this(description, 4) { } // etc
  • 29. Classes – Calling Constructors from Other Constructors cont class Car { private string description; private uint nWheels; public Car(string description, uint nWheels) { this.description = description; this.nWheels = nWheels; } public Car(string description): this(description, 4) { } // etc Car myCar = new Car(&quot;Proton Persona&quot;);
  • 30. Classes – readonly fields public class DocumentEditor { public static readonly uint MaxDocuments; static DocumentEditor() { MaxDocuments = DoSomethingToFindOutMaxNumber(); } }
  • 31. Classes – readonly fields cont. public class Document { public readonly DateTime CreationDate; public Document() { // Read in creation date from file. Assume result is 1 Jan 2002 // but in general this can be different for different instances // of the class CreationDate = new DateTime(2002, 1, 1); } } CreationDate and MaxDocuments in the previous code snippet are treated like any other field, except that because they are read-only, they cannot be assigned outside the constructors: void SomeMethod() { MaxDocuments = 10; // compilation error here. MaxDocuments is readonly }
  • 32. Anonymous Types Types without names : var captain = new {FirstName = “Ahmad&quot;, MiddleName = “M&quot;, LastName = “Test&quot;};
  • 33. Thanks For Attending Abed El-Azeem Bukhari (MCPD,MCTS and MCP) el-bukhari.com

Editor's Notes

  • #9: using System; namespace Najah { class MainEntryPoint { static void Main() { // Try calling some static functions Console.WriteLine(&amp;quot;Pi is &amp;quot; + MathTesting.GetPi()); int x = MathTesting.GetSquareOf(5); Console.WriteLine(&amp;quot;Square of 5 is &amp;quot; + x); // Instantiate at MathTesting object MathTesting math = new MathTesting(); // this is C#&apos;s way of // instantiating a reference type // Call non-static methods math.Value = 30; Console.WriteLine( &amp;quot;Value field of math variable contains &amp;quot; + math.Value); Console.WriteLine(&amp;quot;Square of 30 is &amp;quot; + math.GetSquare()); } } // Define a class named MathTesting on which we will call a method class MathTesting { public int Value; public int GetSquare() { return Value*Value; } public static int GetSquareOf(int x) { return x*x; } public static double GetPi() { return 3.14159; // It is not a best practice but this sample for study only. } } }
  • #10: using System; namespace Najah { class ParametersTesting { static void SomeFunction(int[] ints, int i) { ints[0] = 100; i = 100; } public static int Main() { int i = 0; int[] ints = { 0, 1, 2, 4, 8 }; // Display the original values Console.WriteLine(&amp;quot;i = &amp;quot; + i); Console.WriteLine(&amp;quot;ints[0] = &amp;quot; + ints[0]); Console.WriteLine(&amp;quot;Calling SomeFunction...&amp;quot;); // After this method returns, ints will be changed, // but i will not SomeFunction(ints, i); Console.WriteLine(&amp;quot;i = &amp;quot; + i); Console.WriteLine(&amp;quot;ints[0] = &amp;quot; + ints[0]); return 0; } } }