Presentation is loading. Please wait.

Presentation is loading. Please wait.

Static Members, Structures, Enumerations, Generic Classes, Namespaces Telerik Software Academy Object-Oriented Programming.

Similar presentations


Presentation on theme: "Static Members, Structures, Enumerations, Generic Classes, Namespaces Telerik Software Academy Object-Oriented Programming."— Presentation transcript:

1 Static Members, Structures, Enumerations, Generic Classes, Namespaces Telerik Software Academy http://academy.telerik.com Object-Oriented Programming

2 1. Static Members 2. Structures in C# 3. Generics 4. Namespaces 5. Indexers 6. Operators 7. Attributes 2

3 Static vs. Instance Members

4  Static members are associated with a type rather than with an instance  Defined with the modifier static  Static can be used for  Fields  Properties  Methods  Events  Constructors 4

5  Static:  Associated with a type, not with an instance  Non-Static:  The opposite, associated with an instance  Static:  Initialized just before the type is used for the first time  Non-Static:  Initialized when the constructor is called 5

6 static class SqrtPrecalculated { public const int MAX_VALUE = 10000; public const int MAX_VALUE = 10000; // Static field // Static field private static int[] sqrtValues; private static int[] sqrtValues; // Static constructor // Static constructor static SqrtPrecalculated() static SqrtPrecalculated() { sqrtValues = new int[MAX_VALUE + 1]; sqrtValues = new int[MAX_VALUE + 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) 6

7 // 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( Console.WriteLine( SqrtPrecalculated.GetSqrt(254)); SqrtPrecalculated.GetSqrt(254)); // Result: 15 // Result: 15 }} 7

8 Live Demo

9

10  What is a structure in C#?  A value data type (behaves like a primitive type)  Examples of structures: int, double, DateTime  Classes are reference types  Declared by the keyword struct  Structures, like classes, have properties, methods, fields, constructors, events, …  Always have a parameterless constructor  It cannot be removed  Mostly used to store data (bunch of fields) 10

11 struct Point { public int X { get; set; } public int X { get; set; } public int Y { get; set; } public int Y { get; set; }} struct Color { public byte RedValue { get; set; } public byte RedValue { get; set; } public byte GreenValue { get; set; } public byte GreenValue { get; set; } public byte BlueValue { get; set; } public byte BlueValue { get; set; }} enum Edges { Straight, Rounded } (example continues) (example continues) 11

12 struct Square { public Point Location { get; set; } public Point Location { get; set; } public int Size { get; set; } public int Size { get; set; } public Color SurfaceColor { get; set; } public Color SurfaceColor { get; set; } public Color BorderColor { get; set; } public Color BorderColor { get; set; } public Edges Edges { get; set; } public Edges Edges { get; set; } public Square(Point location, int size, public Square(Point location, int size, Color surfaceColor, Color borderColor, Color surfaceColor, Color borderColor, Edges edges) : this() Edges edges) : this() { this.Location = location; this.Location = location; this.Size = size; this.Size = size; this.SurfaceColor = surfaceColor; this.SurfaceColor = surfaceColor; this.BorderColor = borderColor; this.BorderColor = borderColor; this.Edges = edges; this.Edges = edges; }} 12

13 Live Demo

14 Parameterizing Classes

15  Generics allow defining parameterized classes that process data of unknown (generic) type  The class can be instantiated (specialized) with different particular types  Example: List  List / List / List  Example: List  List / List / List  Generics are also known as "parameterized types" or "template types"  Similar to the templates in C++  Similar to the generics in Java 15

16 public class GenericList public class GenericList { public void Add(T element) { … } public void Add(T element) { … }} class GenericListExample { static void Main() static void Main() { // Declare a list of type int // Declare a list of type int GenericList intList = GenericList intList = new GenericList (); new GenericList (); // Declare a list of type string // Declare a list of type string GenericList stringList = GenericList stringList = new GenericList (); new GenericList (); }} T is an unknown type, parameter of the class T can be used in any method in the class T can be replaced with int during the instantiation 16

17 Live Demo

18  Generic class declaration:  Example: 18 class MyClass : class-base where where { // Class body // Class body} class MyClass : BaseClass where T : new() { // Class body // Class body}

19  Parameter constraints clause:  Example: public class MyClass public class MyClass where T: class, IEnumerable, new() {…} public SomeGenericClass public SomeGenericClass where type-parameter : primary-constraint, secondary-constraints, constructor-constraint

20  Primary constraint:  class (reference type parameters)  struct (value type parameters)  Secondary constraints:  Interface derivation  Base class derivation  Constructor constraint:  new() – parameterless constructor constraint

21 Live Demo

22 public static T Min (T first, T second) where T : IComparable where T : IComparable { if (first.CompareTo(second) <= 0) if (first.CompareTo(second) <= 0) return first; return first; else else return second; return second;} static void Main() { int i = 5; int i = 5; int j = 7; int j = 7; int min = Min (i, j); int min = Min (i, j);}

23 Live Demo

24

25  Namespaces logically group type definitions  May contain classes, structures, interfaces, enumerators and other types and namespaces  Can not contain methods and data directly  Can be allocated in one or several files  Namespaces in.NET are similar to namespaces in C++ and packages in Java  Allows definition of types with duplicated names  E.g. a type named Button is found in Windows Forms, in WPF and in ASP.NET Web Forms 25

26  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 begging of the file  When includes a namespace with using its subset of namespaces is not included using System.Windows.Forms; 26

27  Types, placed in namespaces, can be used and without using directive, by their full name:  using can create alias for namespaces : 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"); 27

28  Divide the types in your applications into namespaces  When the types are too much (more than 15-20)  Group the types logically in namespaces according to their purpose  Use nested namespaces when the types are too much  E.g. for Tetris game you may have the following namespaces: Tetris.Core, Tetris.Web, Tetris.Win8, Tetris.HTML5Client 28

29  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 29

30 namespace SofiaUniversity.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 { // … // … }}

31 namespace SofiaUniversity.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 SofiaUniversity { public class AdministrationSystem public class AdministrationSystem { public static void Main() public static void Main() { // … // … } }}

32  Recommended directory structure and classes organization in them 32

33 Live Demo

34 Indexers

35 Indexers  Indexers provide indexed access class data  Predefine the [] operator for certain type  Like when accessing array elements  Can accept one or multiple parameters  Defining an indexer: 35 IndexedType t = new IndexedType(50); int i = t[5]; t[0] = 42; personInfo["Nikolay Kostov", 25] public int this [int index] { … }

36 Indexers – ExampleIndexers – Example 36 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 ((value & (1 << index)) == 0) if ((value & (1 << index)) == 0) return 0; return 0; else else return 1; return 1; } (the example continues) (the example continues)

37 Indexers – Example (2)Indexers – Example (2) 37 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 value &= ~((uint)(1 << index)); value &= ~((uint)(1 << index)); // Set the bit at position index to value // Set the bit at position index to value value |= (uint)(value << index); value |= (uint)(value << index);}

38 Indexers Live DemoLive Demo

39 Operators OverloadingOperators Overloading

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

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

42 Overloading Operators – Example 42 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)

43 Overloading Operators – Example (2) 43 // 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);}

44 Overloading OperatorsOverloading Operators Live DemoLive Demo

45 Attributes Applying Attributes to Code ElementsApplying Attributes to Code Elements

46 What are Attributes?What are Attributes? .NET attributes are:  Declarative tags for attaching descriptive information in the declarations in the code  Saved in the assembly at compile time  Objects derived from System.Attribute  Can be accessed at runtime (through reflection) and manipulated by many tools  Developers can define custom attributes 46

47 Applying Attributes – ExampleApplying Attributes – Example  Attribute's name is surrounded by square brackets []  Placed before their target declaration  [Flags] attribute indicates that the enum type can be treated like a set of bit flags 47 [Flags] // System.FlagsAttribute public enum FileAccess { Read = 1, Read = 1, Write = 2, Write = 2, ReadWrite = Read | Write ReadWrite = Read | Write}

48 Attributes with Parameters (2)Attributes with Parameters (2)  Attributes can accept parameters for their constructors and public properties  The [DllImport] attribute refers to:  System.Runtime.InteropServices. DllImportAttribute  " user32.dll " is passed to the constructor  " MessageBox " value is assigned to EntryPoint 48 [DllImport("user32.dll", EntryPoint="MessageBox")] public static extern int ShowMessageBox(int hWnd, string text, string caption, int type); string text, string caption, int type);… ShowMessageBox(0, "Some text", "Some caption", 0);

49 Set a Target to an AttributeSet a Target to an Attribute  Attributes can specify its target declaration:  See the Properties/AssemblyInfo.cs file 49 // target "assembly" [assembly: AssemblyTitle("Attributes Demo")] [assembly: AssemblyCompany("DemoSoft")] [assembly: AssemblyProduct("Entreprise Demo Suite")] [assembly: AssemblyVersion("2.0.1.37")] [Serializable] // [type: Serializable] class TestClass { [NonSerialized] // [field: NonSerialized] [NonSerialized] // [field: NonSerialized] private int status; private int status;}

50 Live Demo

51 Custom AttributesCustom Attributes .NET developers can define their own custom attributes  Must inherit from System.Attribute class  Their names must end with ' Attribute '  Possible targets must be defined via [AttributeUsage]  Can define constructors with parameters  Can define public fields and properties 51

52 Custom Attributes – ExampleCustom Attributes – Example 52 [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Interface, AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true)] AllowMultiple = true)] public class AuthorAttribute : System.Attribute { public string Name { get; private set; } public string Name { get; private set; } public AuthorAttribute(string name) public AuthorAttribute(string name) { this.Name = name; this.Name = name; }} // Example continues // Example continues

53 Custom Attributes – Example (2) 53 [Author("Doncho Minkov")] [Author("Nikolay Kostov")] class CustomAttributesDemo { static void Main(string[] args) static void Main(string[] args) { Type type = typeof(CustomAttributesDemo); Type type = typeof(CustomAttributesDemo); object[] allAttributes = object[] allAttributes = type.GetCustomAttributes(false); type.GetCustomAttributes(false); foreach (AuthorAttribute attr in allAttributes) foreach (AuthorAttribute attr in allAttributes) { Console.WriteLine( Console.WriteLine( "This class is written by {0}. ", attr.Name); "This class is written by {0}. ", attr.Name); } }}

54 Defining, Applying and Retrieving Custom Attributes Live Demo

55  Classes define specific structure for objects  Objects are particular instances of a class  Constructors are invoked when creating new class instances  Properties expose the class data in safe, controlled way  Static members are shared between all instances  Instance members are per object  Structures are "value-type" classes  Generics are parameterized classes 55

56 форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране http://academy.telerik.com

57  C# Programming @ Telerik Academy  csharpfundamentals.telerik.com csharpfundamentals.telerik.com  Telerik Software Academy  academy.telerik.com academy.telerik.com  Telerik Academy @ Facebook  facebook.com/TelerikAcademy facebook.com/TelerikAcademy  Telerik Software Academy Forums  forums.academy.telerik.com forums.academy.telerik.com


Download ppt "Static Members, Structures, Enumerations, Generic Classes, Namespaces Telerik Software Academy Object-Oriented Programming."

Similar presentations


Ads by Google