SlideShare uma empresa Scribd logo
1 de 33
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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classes -  Class Members (cont) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classes -  Class Members (cont) ,[object Object],[object Object]
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

Mais conteúdo relacionado

Mais procurados

Abstract & Interface
Abstract & InterfaceAbstract & Interface
Abstract & Interface
Linh Lê
 
Reflection in java
Reflection in javaReflection in java
Reflection in java
upen.rockin
 
Object Oriented Programming with Java
Object Oriented Programming with JavaObject Oriented Programming with Java
Object Oriented Programming with Java
backdoor
 

Mais procurados (20)

Java Reflection
Java ReflectionJava Reflection
Java Reflection
 
Inheritance
InheritanceInheritance
Inheritance
 
Java interfaces & abstract classes
Java interfaces & abstract classesJava interfaces & abstract classes
Java interfaces & abstract classes
 
Inheritance
InheritanceInheritance
Inheritance
 
04cpp inh
04cpp inh04cpp inh
04cpp inh
 
Java Reflection Concept and Working
Java Reflection Concept and WorkingJava Reflection Concept and Working
Java Reflection Concept and Working
 
Inheritance chepter 7
Inheritance chepter 7Inheritance chepter 7
Inheritance chepter 7
 
Reflection
ReflectionReflection
Reflection
 
C# classes objects
C#  classes objectsC#  classes objects
C# classes objects
 
Abstract & Interface
Abstract & InterfaceAbstract & Interface
Abstract & Interface
 
Reflection in java
Reflection in javaReflection in java
Reflection in java
 
Object Oriented Programming with Java
Object Oriented Programming with JavaObject Oriented Programming with Java
Object Oriented Programming with Java
 
Java: Inheritance
Java: InheritanceJava: Inheritance
Java: Inheritance
 
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
Chapter 02: Classes Objects and Methods Java by Tushar B KuteChapter 02: Classes Objects and Methods Java by Tushar B Kute
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Java
 
OBJECT ORIENTED PROGRAMING IN C++
OBJECT ORIENTED PROGRAMING IN C++ OBJECT ORIENTED PROGRAMING IN C++
OBJECT ORIENTED PROGRAMING IN C++
 
Inheritance
InheritanceInheritance
Inheritance
 
Java interfaces
Java interfacesJava interfaces
Java interfaces
 
Java interface
Java interfaceJava interface
Java interface
 
Core java notes with examples
Core java notes with examplesCore java notes with examples
Core java notes with examples
 

Destaque

Proyecto de investigacion
Proyecto de investigacionProyecto de investigacion
Proyecto de investigacion
2732910
 
Vygostky and the education of infants and toddlers
Vygostky and the education of infants and toddlersVygostky and the education of infants and toddlers
Vygostky and the education of infants and toddlers
072771
 
Csharp4 arrays and_tuples
Csharp4 arrays and_tuplesCsharp4 arrays and_tuples
Csharp4 arrays and_tuples
Abed Bukhari
 
Csharp4 delegates lambda_and_events
Csharp4 delegates lambda_and_eventsCsharp4 delegates lambda_and_events
Csharp4 delegates lambda_and_events
Abed Bukhari
 
Gobernacion sonsonate
Gobernacion sonsonateGobernacion sonsonate
Gobernacion sonsonate
Adalberto
 

Destaque (7)

Airindia
AirindiaAirindia
Airindia
 
Proyecto de investigacion
Proyecto de investigacionProyecto de investigacion
Proyecto de investigacion
 
Vygostky and the education of infants and toddlers
Vygostky and the education of infants and toddlersVygostky and the education of infants and toddlers
Vygostky and the education of infants and toddlers
 
Ozone mobile media
Ozone mobile mediaOzone mobile media
Ozone mobile media
 
Csharp4 arrays and_tuples
Csharp4 arrays and_tuplesCsharp4 arrays and_tuples
Csharp4 arrays and_tuples
 
Csharp4 delegates lambda_and_events
Csharp4 delegates lambda_and_eventsCsharp4 delegates lambda_and_events
Csharp4 delegates lambda_and_events
 
Gobernacion sonsonate
Gobernacion sonsonateGobernacion sonsonate
Gobernacion sonsonate
 

Semelhante a Csharp4 objects and_types

Java căn bản - Chapter4
Java căn bản - Chapter4Java căn bản - Chapter4
Java căn bản - Chapter4
Vince Vo
 
9781439035665 ppt ch08
9781439035665 ppt ch089781439035665 ppt ch08
9781439035665 ppt ch08
Terry Yoast
 
Csharp4 inheritance
Csharp4 inheritanceCsharp4 inheritance
Csharp4 inheritance
Abed Bukhari
 
C++ppt. Classs and object, class and object
C++ppt. Classs and object, class and objectC++ppt. Classs and object, class and object
C++ppt. Classs and object, class and object
secondakay
 
classes object fgfhdfgfdgfgfgfgfdoop.pptx
classes object  fgfhdfgfdgfgfgfgfdoop.pptxclasses object  fgfhdfgfdgfgfgfgfdoop.pptx
classes object fgfhdfgfdgfgfgfgfdoop.pptx
arjun431527
 

Semelhante a Csharp4 objects and_types (20)

Java căn bản - Chapter4
Java căn bản - Chapter4Java căn bản - Chapter4
Java căn bản - Chapter4
 
Chapter 4 - Defining Your Own Classes - Part I
Chapter 4 - Defining Your Own Classes - Part IChapter 4 - Defining Your Own Classes - Part I
Chapter 4 - Defining Your Own Classes - Part I
 
OOP and C++Classes
OOP and C++ClassesOOP and C++Classes
OOP and C++Classes
 
Implementing one feature set in two JavaScript engines (Web Engines Hackfest ...
Implementing one feature set in two JavaScript engines (Web Engines Hackfest ...Implementing one feature set in two JavaScript engines (Web Engines Hackfest ...
Implementing one feature set in two JavaScript engines (Web Engines Hackfest ...
 
Defining classes-and-objects-1.0
Defining classes-and-objects-1.0Defining classes-and-objects-1.0
Defining classes-and-objects-1.0
 
9781439035665 ppt ch08
9781439035665 ppt ch089781439035665 ppt ch08
9781439035665 ppt ch08
 
Lecture 5
Lecture 5Lecture 5
Lecture 5
 
Csharp4 inheritance
Csharp4 inheritanceCsharp4 inheritance
Csharp4 inheritance
 
Advanced c#
Advanced c#Advanced c#
Advanced c#
 
14. Defining Classes
14. Defining Classes14. Defining Classes
14. Defining Classes
 
Java Programming - 04 object oriented in java
Java Programming - 04 object oriented in javaJava Programming - 04 object oriented in java
Java Programming - 04 object oriented in java
 
Java Basic day-2
Java Basic day-2Java Basic day-2
Java Basic day-2
 
java tutorial 3
 java tutorial 3 java tutorial 3
java tutorial 3
 
C++ppt. Classs and object, class and object
C++ppt. Classs and object, class and objectC++ppt. Classs and object, class and object
C++ppt. Classs and object, class and object
 
classes object fgfhdfgfdgfgfgfgfdoop.pptx
classes object  fgfhdfgfdgfgfgfgfdoop.pptxclasses object  fgfhdfgfdgfgfgfgfdoop.pptx
classes object fgfhdfgfdgfgfgfgfdoop.pptx
 
Unidad o informatica en ingles
Unidad o informatica en inglesUnidad o informatica en ingles
Unidad o informatica en ingles
 
C++ classes tutorials
C++ classes tutorialsC++ classes tutorials
C++ classes tutorials
 
Chap08
Chap08Chap08
Chap08
 
Lecture 5
Lecture 5Lecture 5
Lecture 5
 
Chapter 7 - Defining Your Own Classes - Part II
Chapter 7 - Defining Your Own Classes - Part IIChapter 7 - Defining Your Own Classes - Part II
Chapter 7 - Defining Your Own Classes - Part II
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 

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.
  • 4.
  • 5.
  • 6.
  • 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

Notas do Editor

  1. 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. } } }
  2. 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; } } }