530 likes | 654 Views
Microsoft .NET Interoperability for Beginners. Vjekoslav Babic (Fortempo). About me. Vjekoslav Babić consultant, trainer, blogger, author Blog : vjeko.com E-mail: vjeko@vjeko.com Author of many How Do I… videos for MSDN and PartnerSource for NAV 2013 and NAV 2013 R2
E N D
Microsoft .NET Interoperability for Beginners Vjekoslav Babic (Fortempo)
About me Vjekoslav Babić consultant, trainer, blogger, author Blog: vjeko.com E-mail: vjeko@vjeko.com Author of many How Do I… videos for MSDN and PartnerSourcefor NAV 2013 and NAV 2013 R2 Co-author of “Implementing Microsoft Dynamics NAV 2009” book
What Do Programmers Really Do? • A lot of the time?
What Are We Going To Do Today… • Managing strings and text • Managing dates, times, and numbers • Accessing operating system, file system, and the environment • Managing data, arrays, collections, and streams C/AL.NET
The DotNet Data Type • Variables of type DotNet give access to .NET Framework • Each DotNet variable specifies: • Assembly • Type • DotNet gives access to: • Methods • Properties • Constructors • Enumerations
System.String • A powerful class to handle text information. • Maps fully and directly to Text data type in C/AL.
System.Text.StringBuilder • A very powerful class to handle large text data efficiently.
Constructors • Create an instance of a class. • There is no equivalent in C/AL to constructors. • CREATE function for instantiating automation objects is the closest • Typically used to: • Initialize the default state of an object • Execute default initialization logic • Limit instantiation
Syntax of a Constructor • The name of the constructor always matches the class name. • This probably looks confusing in C/AL: • StringBuilder:= StringBuilder.StringBuilder; • (why in the Earth do we need all those StringBuilders?) • Replace the StringBuildervariable name with s, and it’s more manageable: • s := s.StringBuilder; • The syntax of the constructor in C/AL is the following: • Variable := Variable.[Class Name]({argument1, …});
Overloading • Capability that allows multiple members to use the same name as long as the signature remains different. • C/AL understands overloading of: • Methods • Constructors
System.Diagnostics.Stopwatch • A simple and useful class to handle time measurements.
Namespace • A higher-level scope used to organize code • Namespace has a many-to-many relationship to assemblies: • One assembly can contain multiple namespaces • The same namespace can span multiple assemblies
System.Text.RegularExpressions • A namespace containing classes for managing regular expressions. • In case you didn’t know: • Regular Expressions (RegEx) are a language used for searching text data through pattern matching • Regular Expressions are SQL of textual data
System.DateTime • Manages date and time information. • Maps fully and directly to DateTimedata type in C/AL. • Many useful properties and methods.
System.Globalization • Namespace that defines a lot of useful type for managing date and time formats, regional settings, cultures, etc. • Useful classes: • Calendar • CultureInfo • DateTimeFormatInfo • NumberFormatInfo
System.Globalization.CultureInfo • Provides access to culture information. Cultures are the heart of the .NET localization/globalization functionality.
System.Globalization.DateTimeFormatInfo • Provides access to date and time formatting information.
System.Globalization.NumberFormatInfo • Provides access to number formatting information.
System.Math • Provides methods for trigonometric, logarithmic, and other common mathematical functions.
System.Numerics.BigInteger • Represents an arbitrarily large integer value, without any theoretical upper or lower bounds.
System.Convert • Converts a base type to another base type.
System.IO • Namespace that provides many useful input and output classes.
System.IO.File • Provides static methods for the creation, copying, deletion, moving, and opening of files.
Static objects and methods • Static classes cannot be instantiated • Static methodscan be called on classes • Static classes and members are sharedfor the whole application domain • Microsoft Dynamics NAV Server runs as a single application domain
System.IO.Directory • Exposes static methods for creating, moving, and enumerating through directories and subdirectories.
System.IO.Path • Performs operations on String instances that contain file or directory path information.
System.IO.FileSystemWatcher • Listens to the file system change notifications and raises events when a directory, or file in a directory, changes.
Events • Enable a class to notify other classes when something of interest happens. • Equivalent to C/AL triggers. • Events are not automatically exposed. • You must first set the WithEventsproperty. • Events can run be: • Server-Side: default behavior, if RunOnClientis No • Client-Side: if RunOnClientis Yes
Enumerations • Types that consist of set of named constants. • Similar, but not nearly equal to C/AL options.
System.Diagnostics.EventLog • Provides interaction with Windows event logs.
Managing Type Information at Runtime • System.Type • GETDOTNETTYPE • CANLOADTYPE
Arrays and Collections • Arrays: • Contain a fixed number of values of the same data type • Roughly correspond to C/AL arrays (variables with Dimensions property) • Collections: • Contain an arbitrary, flexible number of values of the same data type • No equivalent in C/AL • Both arrays and collections are extensively used in .NET
System.Array • Provides methods for creating, manipulating, searching, and sorting arrays. • Serves as the base class for all arrays in the common language runtime.
Enumerators • Enable iterating through arrays and collections. • C# uses the foreachkeyword to manage the iteration. • Two interfaces are in charge of the enumerator-based iteration: • IEnumerable<T> • IEnumerator<T> • IEnumerable<T> • Exposestheenumerator • IEnumerator<T> • Allowsiterationthroughenumerableobject • Current • MoveNext
System.Object • The ultimate base class of all classes in the .NET Framework. • The root of the type hierarchy.
System.Collections.HashTable • Represents a list of key/value pairs that are stored by using a hash table.
System.Collections.Generic.List<T> • Represents a strongly typed list of objects that can be accessed by index. • Provides methods to search, sort, and manipulate lists.
Generics • Allow a single design-time declaration that compiles to multiple run-time types. • List<T> can compile to List<int>, List<string>, or List<MyDesiredClass> • Supported on: • Classes and interfaces • Methods • Properties • Structures • Fields • In C/AL, all generics are of type System.Object
Mapping .NET Types to C/AL • Some types map fully: • String • DateTime • InStream and OutStream • Many data types map uni-directionally: • Most simple data types (Boolean, Decimal, Integer, etc.) • Some complex data types (Duration) • You cannot use uni-directionally mapped .NET data types in C/AL directly.
System.IO.Stream • A class that provides a generic view of a sequence of bytes. • Typical descendants: • System.IO.MemoryStream • System.IO.FileStream • Fully mutually interchangeable with both InStream and OutStream C/AL types. • Limitation: • CREATEOUTSTREAM and CREATEINSTREAM cannot be called on System.IO.Stream