Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $9.99/month after trial. Cancel anytime.

More on C# in Front Office
More on C# in Front Office
More on C# in Front Office
Ebook165 pages1 hour

More on C# in Front Office

Rating: 0 out of 5 stars

()

Read preview

About this ebook

This is NOT the 2nd Edition of the C# in Front Office. Rather, it extends on the contents in the first book.

LanguageEnglish
PublisherXing Zhou
Release dateJun 2, 2014
ISBN9798224343447
More on C# in Front Office

Read more from Xing Zhou

Related to More on C# in Front Office

Related ebooks

Programming For You

View More

Related articles

Reviews for More on C# in Front Office

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    More on C# in Front Office - Xing Zhou

    More on C# in Front Office

    - Advanced C# in Practice

    Xing ZHOU

    All rights reserved: Xing Zhou ([email protected])

    This book is NOT the 2nd edition of the previous book C# in Front Office (ISBN: 144215358X). Instead, it covers many new topics and has lots of additional information. All contents in this book are chosen based on feedbacks, comments and questions from readers of the previous book.

    Thanks for your interest in my book.

    Table of Contents

    1 More on Excel UDF

    1.1 Process Vector / Matrix

    1.1.1 Vector / Matrix as Input

    1.1.2 Vector / Matrix as Output

    1.1.3 Convert to a Collection of Key-Value Pairs

    1.2 Process Date

    1.2.1 Overview

    1.2.2 A Practical Example - DateAdd()

    1.2.3 Other Features (Business Calendar etc)

    1.3 Hide Unwanted Functions in Excel Function Wizard

    1.3.1 A Simple Solution

    1.3.2 A Better Solution

    1.4 Develop C# UDF without Visual Studio

    2 More on Scripting

    2.1 Debugging Dynamic Script

    2.1.1 Introduction

    2.1.1. Script Debugging in C++

    2.1.2. Script Debugging in C#

    2.1.3. MyUtil.StartDebug()

    2.1.4. Revised Script Engine Implementation

    2.2 Multiple Script Source Files

    3 More on C# / C++ Integration

    3.1 Debug C#/C++ Hybrid Applications

    4 More on Threading

    4.1 Protect Critical Resource

    4.1.1 Race Condition

    4.1.2 Using lock statement

    4.1.3 The Interlocked class

    4.1.4 The Monitor class

    4.1.5 Thread Re-entry

    4.1.6 Reader Lock and Writer Lock

    4.2 Avoid Deadlock

    4.3 Lazy Caching and Double-Checking

    4.4 Eliminate Unnecessary Locking - A Practical Example

    4.5 Double-Buffer Pattern - A Practical Example

    4.6 Thread Synchronization

    4.6.1 Share Data

    4.6.2 Synchronize Execution Flow

    4.7 Monte Carlo

    4.8 Inter-Process Synchronization

    4.8.1 Synchronize Execution Flow

    4.8.2 Share Data

    4.9 Debug a Multithreaded Application

    5 Develop Client Applications

    5.1 Overview and Design Guideline

    5.2 C# Solution Structure

    5.3 C# Application as Client Application

    5.4 VB Application as Client Application

    5.5 Excel as Client Application

    5.6 Web Client

    6 Debugging Tips

    6.1 Display Custom Debug Information

    2.1.5. Method 1 - ToString()

    2.1.6. Method 2 - DebuggerDisplay Attribute

    2.1.7. Method 3 - autoexp.cs

    Index of Examples

    Index of Figures

    1  More on Excel UDF

    In the previous book, C# in Front Office, we have discussed how to develop Excel user defined functions (UDFs) using C#. It is based on COM automation technology which is different from the traditional C++ based approach. Compared with the traditional C++ based approach, the C# based approach is clearly much simpler, more flexible and more intuitive. What is also important is that the C# based approach requires little to none extra learning curve beyond regular C# development skills. This means that any C# developer who can develop and debug regular C# programs can readily develop and debug C# based Excel UDFs. This feature can easily be translated to higher productivity in practice.

    In this chapter, we will discuss some additional details and topics that are related to UDF development but have not been covered in the previous book. These contents are chosen based on readers’ feedback, comments and questions that have been received since publish of the previous book.

    In order to keep this book concise and avoid unnecessary duplication, we will not discuss basic techniques of developing a UDF library using C# here. It is assumed that readers have already gained some practical working knowledge of developing Excel UDF libraries using C#. Otherwise, it is strongly suggested that readers should acquire such knowledge before continuing on this chapter. This can be done by either reading the 1st chapter of the previous book or taking some relevant training.

    1.1  Process Vector / Matrix

    1.1.1  Vector / Matrix as Input

    Vectors and matrices are basic but very important mathematic data types. They are widely used in front office analytic libraries. As such, it is a natural requirement to process these two data types in UDFs. In this section, we will discuss some practical details and tricks about processing vectors and matrices in C# based UDFs.

    On an Excel worksheet, a single-row or a single-column range is a natural representation of a vector; and a multi-row-multi-column range is a natural representation of a matrix. Thus it is intuitive to use Excel’s built-in Range[1] class as the parameter data type in a UDF to represent vector and/or matrix inputs. In fact, the Range class has all the usual properties that we will normally expect from a vector or a matrix class. These include Rows, Columns and so on. It also has a Cells iteration interface for looping through all its cells within this Range object. All these give us a clearly defined simple interface to deal with a Range object. Therefore, processing vectors/matrices as inputs is very simple and intuitive in C#.

    However it is important to note how we should retrieve a numeric value from an individual cell using C#. For performance reason, we should use direct type cast instead of parsing the cell contents as text string first. This is because even though the Value2 property is declared as object type and has a default ToString() method, it is actually a double if the cell contains a number. Because it is a double, we can safely use direct type cast.

    This means that we should NOT do something like the following:

    double value = Double.Parse(cell.Value2.ToString());

    Instead, we shall use:

    double value = (double)(cell.Value2);

    In reality, there will be a noticeable performance difference between these two approaches if we have to process large number of cells.

    The following is a very simple example which shows how to handle vectors and/or matrices as inputs. And, in particular, it demonstrates how to retrieve numeric values using the direct type cast as we have just discussed. As the code uses the Cells iteration interface, it works for both single-row/column and multi-row/column inputs (i.e. both a vector and a matrix).

    Please note that the ExcelUDFBase class has been fully discussed in the previous book C# in Front Office. It contains all the necessary infrastructural functions to make the class usable as a UDF class. A copy of its source code can be freely downloaded from that book’s website[2].

    [ComVisible(true)

    [ClassInterface(ClassInterfaceType.AutoDual)]

    [Guid(F2719620-DD15-4e83-9E77-EFD27CF89EDE)]

    public class VectorAndMatrixSample : ExcelUDFBase

    {

    public object MySum(MsExcel.Range Input)

    {

    try

    {

    double sum = 0;

    foreach (MsExcel.Range cell in Input)

    {

    sum += (double)(cell.Value2);

    }

    return sum;

    }

    catch (Exception err_)

    {

    return err_.ToString();

    }

    }

    }

    Example 1 Process Vectors and Matrices

    1.1.2  Vector / Matrix as Output

    To generate a vector or a matrix as a UDF’s output is the same thing as returning an object array. Developing an array function has been discussed in section 1.8 of the previous book C# in Front Office. Thus we will not repeat in details here. In a nutshell, an array function is a regular function that returns an object[,] in a C# implementation. If we enter such formula as an array function in an Excel cell (i.e. by pressing <ctrl> + <shift> + <enter>), the output will look like a vector or a matrix on an Excel spreadsheet depending on the dimensions of return data. The previous book has also discussed the technique to ensure the output range has the same dimension as that of the returning vector or matrix. It is very useful in practice not only to beautify the output (e.g. blanketing out additional cells instead of displaying N/A when the given Excel range is bigger than the result vector/matrix) but also to avoid potential misleading situation (e.g. missing output data when the given range is smaller than the result vector/matrix).

    1.1.3  Convert to a Collection of Key-Value Pairs

    Quite often, we need a collection of key-value pairs. A collection of key-value pairs is often used to represent a set of parameters where keys are parameter names and values are parameter values.

    On an Excel spreadsheet, we usually use a 2-row or a 2-column range as such inputs. One row (or column) contains parameter names (i.e. the keys) and the other contains corresponding parameter values (i.e. the values). The follow figure shows a pseudo example.

    As we can imagine, converting such a range

    Enjoying the preview?
    Page 1 of 1