Static Members and Namespaces Static Members, Indexers, Operators, Namespaces SoftUni Team Technical Trainers Software University

Slides:



Advertisements
Similar presentations
Static Members, Structures, Enumerations, Generic Classes, Namespaces Learning & Development Team Telerik Software Academy.
Advertisements

Namespaces, Cohesion and Coupling Veselin Georgiev National Academy for Software Development academy.devbg.org Svetlin Nakov Telerik Corporation
Software Quality Assurance QA Engineering, Testing, Bug Tracking, Test Automation Software University Technical Trainers SoftUni Team.
Other Types in OOP Enumerations, Structures, Generic Classes, Attributes Svetlin Nakov Technical Trainer Software University
 Dimitar Ivanov Introduction to programming with microcontrollers.
C# Advanced Topics Methods, Classes and Objects SoftUni Team Technical Trainers Software University
AngularJS Routing Routes, Route Parameters, Templates, Location, Navigation SoftUni Team Technical Trainers Software University
AngularJS Services Built-in and Custom Services SoftUni Team Technical Trainers Software University
Methods Writing and using methods, overloads, ref, out SoftUni Team Technical Trainers Software University
Software University Curriculum, Courses, Exams, Jobs SoftUni Team Technical Trainers Software University
Fundamentals SoftUni Welcome to Software University SoftUni Team Technical Trainers Software University
Project Tracking Tools Trello, Asana, Basecamp, GitHub Issue Tracker, TRAC SoftUni Team Technical Trainers Software University
AngularJS Directives Defining Custom Directives SoftUni Team Technical Trainers Software University
Software Testing Lifecycle Exit Criteria Evaluation, Continuous Integration Ivan Yonkov Technical Trainer Software University.
Teamwork and Personal Skills Course Introduction Software University SoftUni Team Technical Trainers.
Design Patterns: Structural Design Patterns
High-Quality Programming Code Code Correctness, Readability, Maintainability, Testability, Etc. SoftUni Team Technical Trainers Software University
JavaScript Design Patterns Private Fields, Module, Revealing Module, Revealing Prototype, … Software University Technical Trainers SoftUni.
NoSQL Databases NoSQL Concepts SoftUni Team Technical Trainers Software University
Conditional Statements Implementing Control-Flow Logic in C# SoftUni Team Technical Trainers Software University
Consuming REST Services from C# SoftUni Team Technical Trainers Software University
Loops Repeating Code Multiple Times SoftUni Team Technical Trainers Software University
Start Your Own Blog Angel Georgiev Part-time Trainer angeru.softuni-friends.org Software University The Culture of Knowledge Sharing.
Svetlin Nakov Technical Trainer Software University
Build Processes and Continuous Integration Automating Build Processes Software University Technical Trainers SoftUni Team.
Processing Redis with.NET How to Operate with Redis Databases SoftUni Team Technical Trainers Software University
Multidimensional Arrays, Sets, Dictionaries Processing Matrices, Multidimensional Arrays, Dictionaries, Sets SoftUni Team Technical Trainers Software University.
Project Tracking Tools Trello, Asana, Basecamp, GitHub Issue Tracker, TRAC Angel Georgiev Part-time Trainer Software University
Test-Driven Development Learn the "Test First" Approach to Coding SoftUni Team Technical Trainers Software University
Defining Classes Classes, Fields, Constructors, Methods, Properties SoftUni Team Technical Trainers Software University
Controllers and Markup Controllers, $scope, Markup, Directives, Expressions, Binding, Filters, Validation SoftUni Team Technical Trainers Software University.
AMD and RequireJS Splitting JavaScript Code into Dependent Modules Software University Technical Trainers SoftUni Team.
Asynchronous Web Services Writing Asynchronous Web Services SoftUni Team Technical Trainers Software University
Defining Classes Classes, Fields, Constructors, Methods, Properties Svetlin Nakov Technical Trainer Software University
Jekyll Static Site Generator Template-Based Site Generation Svetlin Nakov Technical Trainer Software University
Code Formatting Correctly Formatting the Source Code Svetlin Nakov Technical Trainer Software University
Forms Overview, Query string, Submitting arrays, PHP & HTML, Input types, Redirecting the user Mario Peshev Technical Trainer Software.
JavaScript Modules and Patterns Private Fields, Module, Revealing Module, Revealing Prototype, … Software University Technical Trainers.
Web Development Tools Tools for Front-End Developers Writing HTML and CSS Code SoftUni Team Technical Trainers Software University
Tables, Rows, Columns, Cells, Header, Footer, Colspan, Rowspan
High-Quality Programming Code Code Correctness, Readability, Maintainability Svetlin Nakov Technical Trainer Software University
Design Patterns: Structural Design Patterns General and reusable solutions to common problems in software design Software University
Prototype Chain and Inheritance Prototype chain, Inheritance, Accessing Base Members Software University Technical Trainers SoftUni Team.
Events Event Handling in JavaScript SoftUni Team Technical Trainers Software University
Object-Oriented Programming Course Introduction Svetlin Nakov Technical Trainer Software University
Reflection Programming under the hood SoftUni Team Technical Trainers Software University
Mocking with Moq Tools for Easier Unit Testing SoftUni Team Technical Trainers Software University
Operators and Expressions
Code Formatting Formatting the Source Code Correctly SoftUni Team Technical Trainers Software University
Mocking Unit Testing Methods with External Dependencies SoftUni Team Technical Trainers Software University
Mocking with Moq Mocking tools for easier unit testing Svetlin Nakov Technical Trainer Software University
Test-Driven Development Learn the "Test First" Approach to Coding Svetlin Nakov Technical Trainer Software University
Sets, Dictionaries SoftUni Team Technical Trainers Software University
Creating Content Defining Topic, Creating Technical Training Materials SoftUni Team Technical Trainers Software University
Functional Programming Data Aggregation and Nested Queries Ivan Yonkov Technical Trainer Software University
Programming Fundamentals Course Introduction SoftUni Team Technical Trainers Software University
Doctrine The PHP ORM SoftUni Team Technical Trainers Software University
Creating Content Defining Topic, Creating Technical Training Materials SoftUni Team Technical Trainers Software University
Static Members, Structures, Enumerations, Generic Classes, Namespaces Telerik Software Academy Object-Oriented Programming.
First Steps in PHP Creating Very Simple PHP Scripts SoftUni Team Technical Trainers Software University
Inheritance Class Hierarchies SoftUni Team Technical Trainers Software University
Static Members Static Variables & Methods SoftUni Team Technical Trainers Software University
Stacks and Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Generics SoftUni Team Technical Trainers Software University
C# OOP Advanced Course Introduction SoftUni Team Technical Trainers Software University
High-Quality Programming Code Code Correctness, Readability, Maintainability, Testability, Etc. SoftUni Team Technical Trainers Software University
Static Members and Namespaces
Classes, Properties, Constructors, Objects, Namespaces
Mocking tools for easier unit testing
Defining Classes – Part II
Presentation transcript:

Static Members and Namespaces Static Members, Indexers, Operators, Namespaces SoftUni Team Technical Trainers Software University

2 1.Static Members 2.Indexers 3.Operators 4.Namespaces Table of Contents

Static Members Static vs. Instance Members

4  Static members are associated with a class (type)  Rather than with an object (instance)  Defined with the modifier static  Static can be used for  Constructors  Fields  Properties  Methods  Events Static Members

5  Static  Static:  Associated with a type (class), not with an instance  Initialized just before the type is used for the first time  Cleared from memory on program exit  Non-Static  Non-Static:  The opposite, associated with an instance (object)  Initialized when the constructor is called  Cleared from memory by the garbage collector Static vs. Non-Static

6 Static Counter – Example public class Person { private static int instanceCounter = 0; private static int instanceCounter = 0; public static int PersonCounter public static int PersonCounter { get { return Person.instanceCounter; } get { return Person.instanceCounter; } } public string Name { get; set; } public string Name { get; set; } public Person(string name = null) public Person(string name = null) { Person.instanceCounter++; Person.instanceCounter++; this.Name = name; this.Name = name; }}

7 Static Members – Example static class SqrtPrecalculated { public const int MaxValue = 10000; public const int MaxValue = 10000; // Static field // Static field private static int[] sqrtValues; private static int[] sqrtValues; // Static constructor // Static constructor static SqrtPrecalculated() static SqrtPrecalculated() { sqrtValues = new int[MaxValue + 1]; sqrtValues = new int[MaxValue + 1]; for (int i = 0; i < sqrtValues.Length; i++) for (int i = 0; i < sqrtValues.Length; i++) { sqrtValues[i] = (int)Math.Sqrt(i); sqrtValues[i] = (int)Math.Sqrt(i); } } (example continues) } (example continues)

8 Static Members – Example (2) // Static method // Static method public static int GetSqrt(int value) public static int GetSqrt(int value) { return sqrtValues[value]; return sqrtValues[value]; }} class SqrtTest { static void Main() static void Main() { Console.WriteLine(SqrtPrecalculated.GetSqrt(254)); Console.WriteLine(SqrtPrecalculated.GetSqrt(254)); // Result: 15 // Result: 15 }}

Static Members Live Demo

Indexers

11  Indexers provide indexed access to class data  Predefine the [] operator for a certain type  Like when accessing array elements  Can accept one or multiple parameters  Defining an indexer: Indexers IndexedType t = new IndexedType(50); int i = t[5]; t[0] = 42; personInfo["Svetlin Nakov", 28] public int this [int index] { … }

12 Indexers – ExampleIndexers – Example struct BitArray32 { private uint value; private uint value; // Indexer declaration // Indexer declaration public int this [int index] public int this [int index] { get get { if (index >= 0 && index = 0 && index <= 31) { // Check the bit at position index // Check the bit at position index if ((this.value & (1 << index)) == 0) if ((this.value & (1 << index)) == 0) return 0; return 0; else else return 1; return 1; } (the example continues) (the example continues)

13 Indexers – Example (2)Indexers – Example (2) else else { throw new IndexOutOfRangeException( throw new IndexOutOfRangeException( String.Format("Index {0} is invalid!", index)); String.Format("Index {0} is invalid!", index)); }}set{ if (index 31) if (index 31) throw new IndexOutOfRangeException( throw new IndexOutOfRangeException( String.Format("Index {0} is invalid!", index)); String.Format("Index {0} is invalid!", index)); if (value 1) if (value 1) throw new ArgumentException( throw new ArgumentException( String.Format("Value {0} is invalid!", value)); String.Format("Value {0} is invalid!", value)); // Clear the bit at position index // Clear the bit at position index this.value &= ~((uint)(1 << index)); this.value &= ~((uint)(1 << index)); // Set the bit at position index to value // Set the bit at position index to value this.value |= (uint)(value << index); this.value |= (uint)(value << index);}

Indexers Live DemoLive Demo

Operators OverloadingOperators Overloading

16  In C# operators can be overloaded (redefined) by developers  The priority of operators cannot be changed  Not all operators can be overloaded  Overloading an operator in C#  Looks like a static method with 2 parameters: Overloading OperatorsOverloading Operators public static Matrix operator *(Matrix m1, Matrix m2) { return new m1.Multiply(m2); return new m1.Multiply(m2);}

17  Overloading is allowed on:  Unary operators  Binary operators  Operators for type conversion  Implicit type conversion  Explicit type conversion (type) Overloading Operators (2)Overloading Operators (2) !, ~, ++, --, true and false +, -, *, /, %, &, |, ^, >, ==, !=, >, = and >, ==, !=, >, = and <=

18 Overloading Operators – ExampleOverloading Operators – Example public static Fraction operator -(Fraction f1,Fraction f2) { long num = f1.numerator * f2.denominator - long num = f1.numerator * f2.denominator - f2.numerator * f1.denominator; f2.numerator * f1.denominator; long denom = f1.denominator * f2.denominator; long denom = f1.denominator * f2.denominator; return new Fraction(num, denom); return new Fraction(num, denom);} public static Fraction operator *(Fraction f1,Fraction f2) { long num = f1.numerator * f2.numerator; long num = f1.numerator * f2.numerator; long denom = f1.denominator * f2.denominator; long denom = f1.denominator * f2.denominator; return new Fraction(num, denom); return new Fraction(num, denom);} (the example continues)

19 Overloading Operators – Example (2)Overloading Operators – Example (2) // Unary minus operator public static Fraction operator -(Fraction fraction) { long num = -fraction.numerator; long num = -fraction.numerator; long denom = fraction.denominator; long denom = fraction.denominator; return new Fraction(num, denom); return new Fraction(num, denom);} // Operator ++ (the same for prefix and postfix form) public static Fraction operator ++(Fraction fraction) { long num = fraction.numerator + fraction.denominator; long num = fraction.numerator + fraction.denominator; long denom = Frac.denominator; long denom = Frac.denominator; return new Fraction(num, denom); return new Fraction(num, denom);}

Overloading OperatorsOverloading Operators Live DemoLive Demo

Namespaces Grouping Classes

22  Namespaces logically group type definitions  May contain classes, structures, interfaces, enumerators and other types and namespaces  Cannot contain methods and data directly  Can be allocated in one or several files  C# namespaces in are similar to C++ namespaces and Java packages  Allow defining types with duplicated names  E.g. a class named Button is found in Windows Forms, in WPF and in ASP.NET Web Forms Namespaces

23  Including a namespace  The using directive is put at the start of the file  using allows direct use of all types in the namespace  Including is applied to the current file  The directive is written at the beginning of the file  When including a namespace with using its nested namespaces are not included Including Namespaces using System.Windows.Forms;

24  Types placed in namespaces can be used without using directive, by their full name:  using can create aliases for namespaces : Including Namespaces (2) using IO = System.IO; using WinForms = System.Windows.Forms; IO.StreamReader reader = IO.File.OpenText("file.txt"); IO.File.OpenText("file.txt"); WinForms.Form form = new WinForms.Form(); System.IO.StreamReader reader = System.IO.File.OpenText("file.txt"); System.IO.File.OpenText("file.txt");

25  Divide the types in your applications into namespaces  When the types are too many (more than 15-20)  Group the types logically in namespaces according to their purpose  Use nested namespaces when the types are too many  E.g. for a Tetris game you may have the following namespaces: Tetris.Core, Tetris.Data, Tetris.Web, Tetris.HTML5Client Defining Namespaces

26  Distribute all public types in files identical with their names  E.g. the class Student should be in the file Student.cs  Arrange the files in directories, corresponding to their namespaces  The directory structure from your project course-code have to reflect the structure of the defined namespaces Defining Namespaces (2)

Namespaces – Example namespace SoftUni.Data { public struct Faculty public struct Faculty { // … // … } public class Student public class Student { // … // … } public class Professor public class Professor { // … // … } public enum Specialty public enum Specialty { // … // … }} 27

Namespaces – Example (2) namespace SoftUni.UI { public class StudentAdminForm : System.Windows.Forms.Form public class StudentAdminForm : System.Windows.Forms.Form { // … // … } public class ProfessorAdminForm : System.Windows.Forms.Form public class ProfessorAdminForm : System.Windows.Forms.Form { // … // … }} namespace SoftUni { public class AdministrationSystem public class AdministrationSystem { public static void Main() public static void Main() { // … // … } }} 28

29  Recommended directory structure and class organization Namespaces – Example (3)

Namespaces Live Demo

 Static members are shared between all instances  Instance members are per object  Indexers allow indexed access to class data  Operator overloading redefines the functionality of the standard operators  Namespaces logically group code around some particular functionality Summary 31

? ? ? ? ? ? ? ? ? OOP – Static Members and Namespaces

License  This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" licenseCreative Commons Attribution- NonCommercial-ShareAlike 4.0 International 33  Attribution: this work may contain portions from  "OOP" course by Telerik Academy under CC-BY-NC-SA licenseOOPCC-BY-NC-SA

Free Software University  Software University Foundation – softuni.orgsoftuni.org  Software University – High-Quality Education, Profession and Job for Software Developers  softuni.bg softuni.bg  Software Facebook  facebook.com/SoftwareUniversity facebook.com/SoftwareUniversity  Software YouTube  youtube.com/SoftwareUniversity youtube.com/SoftwareUniversity  Software University Forums – forum.softuni.bgforum.softuni.bg