Sabtu, 18 Mei 2013

User Defined Function

Cara Membuat User Defined Function di Excel menggunakan C# dan Visual Studio 2008 :

Langkah 1
Pertama, jalankan Visual Studio 2008 dan membuat C # proyek Class Library baru yang disebut BlackScholesAddin untuk contoh ini.

Langkah 2
Dalam file Class1.cs Anda, menghapus semua kode yang ada dan menggantinya dengan kode berikut
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using Microsoft.Win32;
  4. namespace BlackScholesAddin
  5. {
  6.     [ClassInterface(ClassInterfaceType.AutoDual)]
  7.     [ComVisible(true)]
  8.     public class Functions
  9.     {
  10.         public Functions()
  11.         {
  12.         }
  13.         //cumulative normal distribution function
  14.         private double CND(double X)
  15.         {
  16.             double L = 0.0;
  17.             double K = 0.0;
  18.             double dCND = 0.0;
  19.             const double a1 = 0.31938153;
  20.             const double a2 = -0.356563782;
  21.             const double a3 = 1.781477937;
  22.             const double a4 = -1.821255978;
  23.             const double a5 = 1.330274429;
  24.             L = Math.Abs(X);
  25.             K = 1.0 / (1.0 + 0.2316419 * L);
  26.             dCND = 1.0 - 1.0 / Math.Sqrt(2 * Convert.ToDouble(Math.PI.ToString())) *
  27.                 Math.Exp(-L * L / 2.0) * (a1 * K + a2 * K * K + a3 * Math.Pow(K, 3.0) +
  28.                 a4 * Math.Pow(K, 4.0) + a5 * Math.Pow(K, 5.0));
  29.             if (X < 0)
  30.             {
  31.                 return 1.0 - dCND;
  32.             }
  33.             else
  34.             {
  35.                 return dCND;
  36.             }
  37.         }
  38.         //function phi
  39.         private double phi(double x)
  40.         {
  41.             double phi = 0.0;
  42.             phi = Math.Exp(-x * x / 2) / Math.Sqrt(2 * Math.PI);
  43.             return phi;
  44.         }
  45.         //implied volatility using Newton-Raphson method
  46.         public double blsimpvCall(double Price, double Strike, double Rate, double Time, double Value, double Yield)
  47.         {
  48.             const double ACCURACY = 1.0e-6;
  49.             double ComputedVolatility = Math.Pow(Math.Abs(Math.Log(Price / Strike) + Rate * Time) * 2 / Time, 0.5); // initial value of volatility
  50.             double ComputedValue = blsCall(Price, Strike, Rate, Time, ComputedVolatility, Yield);
  51.             double Vega = blsvega(Price, Strike, Rate, Time, ComputedVolatility, Yield);
  52.             while (Math.Abs(Value - ComputedValue) > ACCURACY)
  53.             {
  54.                 ComputedVolatility = ComputedVolatility - ((ComputedValue - Value) / Vega);
  55.                 ComputedValue = blsCall(Price, Strike, Rate, Time, ComputedVolatility, Yield);
  56.                 Vega = blsvega(Price, Strike, Rate, Time, ComputedVolatility, Yield);
  57.             }
  58.             return ComputedVolatility;
  59.         }
  60.         public double blsimpvPut(double Price, double Strike, double Rate, double Time, double Value, double Yield)
  61.         {
  62.             const double ACCURACY = 1.0e-6;
  63.             double ComputedVolatility = Math.Pow(Math.Abs(Math.Log(Price / Strike) + Rate * Time) * 2 / Time, 0.5); // initial value of volatility
  64.             double ComputedValue = blsPut(Price, Strike, Rate, Time, ComputedVolatility, Yield);
  65.             double Vega = blsvega(Price, Strike, Rate, Time, ComputedVolatility, Yield);
  66.             while (Math.Abs(Value - ComputedValue) > ACCURACY)
  67.             {
  68.                 ComputedVolatility = ComputedVolatility - ((ComputedValue - Value) / Vega);
  69.                 ComputedValue = blsPut(Price, Strike, Rate, Time, ComputedVolatility, Yield);
  70.                 Vega = blsvega(Price, Strike, Rate, Time, ComputedVolatility, Yield);
  71.             }
  72.             return ComputedVolatility;
  73.         }
  74.         //Call pricer
  75.         public double blsCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  76.         {
  77.             double d1 = 0.0;
  78.             double d2 = 0.0;
  79.             double Call = 0.0;
  80.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  81.             d2 = d1 - Volatility * Math.Sqrt(Time);
  82.             Call = Price * Math.Exp(-Yield * Time) * CND(d1) - Strike * Math.Exp(-Rate * Time) * CND(d2);
  83.             return Call;
  84.         }
  85.         //Put pricer
  86.         public double blsPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  87.         {
  88.             double d1 = 0.0;
  89.             double d2 = 0.0;
  90.             double Put = 0.0;
  91.      
  92.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  93.             d2 = d1 - Volatility * Math.Sqrt(Time);
  94.             Put = Strike * Math.Exp(-Rate * Time) * CND(-d2) - Price * Math.Exp(-Yield * Time) * CND(-d1);
  95.             return Put;
  96.         }
  97.         //delta for Call
  98.         public double blsdeltaCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  99.         {
  100.             double d1 = 0.0;
  101.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  102.             return Math.Exp(-Yield * Time) * CND(d1);
  103.         }
  104.         //delta for Put
  105.         public double blsdeltaPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  106.         {
  107.             double d1 = 0.0;
  108.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  109.             return Math.Exp(-Yield * Time) * CND(d1) - 1;
  110.         }
  111.         //gamma is the same for Put and Call
  112.         public double blsgamma(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  113.         {
  114.             double d1 = 0.0;
  115.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  116.             return Math.Exp(-Yield * Time) * phi(d1) / (Price * Volatility * Math.Sqrt(Time));
  117.         }
  118.         //vega is the same for Put and Call
  119.         public double blsvega(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  120.         {
  121.             double d1 = 0.0;
  122.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  123.             return Price * Math.Exp(-Yield * Time) * phi(d1) * Math.Sqrt(Time);
  124.         }
  125.         //theta for Call
  126.         public double blsthetaCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  127.         {
  128.             double d1 = 0.0;
  129.             double d2 = 0.0;
  130.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  131.             d2 = d1 - Volatility * Math.Sqrt(Time);
  132.             return -Math.Exp(-Yield * Time) * Price * phi(d1) * Volatility / (2 * Math.Sqrt(Time)) - Rate * Strike * Math.Exp(-Rate * Time) * CND(d2) + Yield * Price * Math.Exp(-Yield * Time) * CND(d1);
  133.         }
  134.         //theta for Put
  135.         public double blsthetaPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  136.         {
  137.             double d1 = 0.0;
  138.             double d2 = 0.0;
  139.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  140.             d2 = d1 - Volatility * Math.Sqrt(Time);
  141.             return -Math.Exp(-Yield * Time) * Price * phi(d1) * Volatility / (2 * Math.Sqrt(Time)) + Rate * Strike * Math.Exp(-Rate * Time) * CND(-d2) - Yield * Price * Math.Exp(-Yield * Time) * CND(-d1);
  142.         }
  143.         //rho for Call
  144.         public double blsrhoCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  145.         {
  146.             double d1 = 0.0;
  147.             double d2 = 0.0;
  148.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  149.             d2 = d1 - Volatility * Math.Sqrt(Time);
  150.             return Strike * Time * Math.Exp(-Rate * Time) * CND(d2);
  151.         }
  152.         //rho for Put
  153.         public double blsrhoPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  154.         {
  155.             double d1 = 0.0;
  156.             double d2 = 0.0;
  157.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  158.             d2 = d1 - Volatility * Math.Sqrt(Time);
  159.             return -Strike * Time * Math.Exp(-Rate * Time) * CND(-d2);
  160.         }
  161.         //volga is the same for Call and Put
  162.         public double blsvolga(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  163.         {
  164.             double d1 = 0.0;
  165.             double d2 = 0.0;
  166.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  167.             d2 = d1 - Volatility * Math.Sqrt(Time);
  168.             return Price * Math.Exp(-Yield * Time) * phi(d1) * Math.Sqrt(Time) * d1 * d2 / Volatility;
  169.         }
  170.         //vanna is the same for Call and Put
  171.         public double blsvanna(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  172.         {
  173.             double d1 = 0.0;
  174.             double d2 = 0.0;
  175.             double vanna = 0.0;
  176.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  177.             d2 = d1 - Volatility * Math.Sqrt(Time);
  178.             vanna = -Math.Exp(-Yield * Time) * phi(d1) * d2 / Volatility;
  179.             return vanna;
  180.         }
  181.         //charm for Call
  182.         public double blscharmCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  183.         {
  184.             double d1 = 0.0;
  185.             double d2 = 0.0;
  186.             double charmC = 0.0;
  187.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  188.             d2 = d1 - Volatility * Math.Sqrt(Time);
  189.             charmC = -Yield * Math.Exp(-Yield * Time) * CND(d1) + Math.Exp(-Yield * Time) * phi(d1) * (2 * (Rate - Yield) * Time - d2 * Volatility * Math.Sqrt(Time)) / (2 * Time * Volatility * Math.Sqrt(Time));
  190.             return charmC;
  191.         }
  192.         //charm for Put
  193.         public double blscharmPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  194.         {
  195.             double d1 = 0.0;
  196.             double d2 = 0.0;
  197.             double charmP = 0.0;
  198.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  199.             d2 = d1 - Volatility * Math.Sqrt(Time);
  200.             charmP = Yield * Math.Exp(-Yield * Time) * CND(-d1) - Math.Exp(-Yield * Time) * phi(d1) * (2 * (Rate - Yield) * Time - d2 * Volatility * Math.Sqrt(Time)) / (2 * Time * Volatility * Math.Sqrt(Time));
  201.             return charmP;
  202.         }
  203.         //color is the same for Call and Put
  204.         public double blscolor(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  205.         {
  206.             double d1 = 0.0;
  207.             double d2 = 0.0;
  208.             double color = 0.0;
  209.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  210.             d2 = d1 - Volatility * Math.Sqrt(Time);
  211.             color = -Math.Exp(-Yield * Time) * (phi(d1) / (2 * Price * Time * Volatility * Math.Sqrt(Time))) * (2 * Yield * Time + 1 + (2 * (Rate - Yield) * Time - d2 * Volatility * Math.Sqrt(Time)) * d1 / (2 * Time * Volatility * Math.Sqrt(Time)));
  212.             return color;
  213.         }
  214.         //dual delta for Call
  215.         public double blsdualdeltaCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  216.         {
  217.             double d1 = 0.0;
  218.             double d2 = 0.0;
  219.             double ddelta = 0.0;
  220.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  221.             d2 = d1 - Volatility * Math.Sqrt(Time);
  222.             ddelta = -Math.Exp(-Rate * Time) * CND(d2);
  223.             return ddelta;
  224.         }
  225.         //dual delta for Put
  226.         public double blsdualdeltaPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  227.         {
  228.             double d1 = 0.0;
  229.             double d2 = 0.0;
  230.             double ddelta = 0.0;
  231.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  232.             d2 = d1 - Volatility * Math.Sqrt(Time);
  233.             ddelta = Math.Exp(-Rate * Time) * CND(-d2);
  234.             return ddelta;
  235.         }
  236.         //dual gamma is the same for Call and Put
  237.         public double blsdualgamma(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
  238.         {
  239.             double d1 = 0.0;
  240.             double d2 = 0.0;
  241.             double dgamma = 0.0;
  242.             d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
  243.             d2 = d1 - Volatility * Math.Sqrt(Time);
  244.             dgamma = Math.Exp(-Rate * Time) * phi(d2) / (Strike * Volatility * Math.Sqrt(Time));
  245.             return dgamma;
  246.         }
  247.         [ComRegisterFunctionAttribute]
  248.         public static void RegisterFunction(Type type)
  249.         {
  250.             Registry.ClassesRoot.CreateSubKey(
  251.               GetSubKeyName(type, "Programmable"));
  252.             RegistryKey key = Registry.ClassesRoot.OpenSubKey(
  253.               GetSubKeyName(type, "InprocServer32"), true);
  254.             key.SetValue("",
  255.               System.Environment.SystemDirectory + @"\mscoree.dll",
  256.               RegistryValueKind.String);
  257.         }
  258.         [ComUnregisterFunctionAttribute]
  259.         public static void UnregisterFunction(Type type)
  260.         {
  261.             Registry.ClassesRoot.DeleteSubKey(
  262.               GetSubKeyName(type, "Programmable"), false);
  263.         }
  264.         private static string GetSubKeyName(Type type,
  265.           string subKeyName)
  266.         {
  267.             System.Text.StringBuilder s =
  268.               new System.Text.StringBuilder();
  269.             s.Append(@"CLSID\{");
  270.             s.Append(type.GUID.ToString().ToUpper());
  271.             s.Append(@"}\");
  272.            s.Append(subKeyName);
  273.            return s.ToString();
  274.        }
  275.    }
  276. }


Langkah 3
Dengan kode ini ditulis, menunjukkan properti untuk proyek dengan mengklik ganda pada sifat simpul bawah proyek di Solution Explorer. Klik pada tab Build dan periksa kotak centang yang mengatakan "Daftar untuk COM Interop". Kemudian pilih "Build" untuk membangun add-in.
Langkah 4
Tambahkan UDF baru saja kita buat ke daftar Excel addins
Untuk Excel 2007
Peluncuran Excel dan klik pada tombol utama di pojok kiri atas dan klik Excel Options. Pilih Add-Ins pada menu kiri dan di drop down menu bawah, pilih Excel Add-ins dan klik Go. Klik pada tombol Otomasi. Anda dapat menemukan kelas yang Anda buat dengan mencari BlackScholesAddin.Functions dalam daftar Otomasi add-in:

Untuk Excel 2003 XP
Peluncuran Excel dan pergi ke Tools, dialog Add-in di Excel dan klik pada tombol Otomasi. Anda dapat menemukan kelas yang Anda buat dengan mencari BlackScholesAddin.Functions dalam daftar Automation add-in:
Dengan mengklik OK dalam dialog ini, Anda menambahkan BlackScholesAddin.Functions ke daftar diinstal add-in seperti yang ditunjukkan di sini. Anda mungkin mendapatkan dialog pada saat ini tentang mscoree.dll. Klik NO untuk dialog ini (ya akan menghapus add-in dari daftar).]
Langkah 5
Sekarang, mari kita coba untuk menggunakan semua fungsi blsCall dalam Excel. Pertama membuat spreadsheet kosong. Klik pada sel kosong di buku kerja dan kemudian klik pada tombol Insert Function dalam formula bar. Dari dialog formula yang tersedia, drop-down "Atau pilih kategori" drop down box dan pilih "BlackScholesAddin.Functions". Kemudian klik pada fungsi blsCall seperti yang ditunjukkan di sini:

Catatan: Saya menggunakan notasi yang sama seperti yang digunakan oleh Matlab fungsi Black-Scholes untuk harga opsi dan Yunani. Lebih lanjut tentang hal itu dapat ditemukan di sini
Catatan 2:. Sebagaimana dicatat oleh chancea jika BlackScholesAddin.Functions tidak muncul dalam daftar Otomasi (dalam instalasi nya VS2010 SP1 dan Excel 2007), mengubah properti proyek dari menggunakan NET 4.0 sampai 3.5.
Langkah 6
Gunakan seperti fungsi biasa Excel builtin.
option pricer:
blsCall(Price, Strike, Rate, Time, Volatility, Yield)
blsPut(Price, Strike, Rate, Time, Volatility, Yield)

Delta
blsdeltaCall(Price, Strike, Rate, Time, Volatility, Yield)
blsdeltaPut(Price, Strike, Rate, Time, Volatility, Yield
Theta
blsthetaCall(Price, Strike, Rate, Time, Volatility, Yield)
blsthetaPut(Price, Strike, Rate, Time, Volatility, Yield)

Rho
blsrhoCall(Price, Strike, Rate, Time, Volatility, Yield)
blsrhoPut(Price, Strike, Rate, Time, Volatility, Yield)

Charm
blscharmCall(Price, Strike, Rate, Time, Volatility, Yield)
blscharmPut(Price, Strike, Rate, Time, Volatility, Yield)

Dual delta
blsdualdeltaCall(Price, Strike, Rate, Time, Volatility, Yield)
blsdualdeltaPut(Price, Strike, Rate, Time, Volatility, Yield)

Gamma
blsgamma(Price, Strike, Rate, Time, Volatility, Yield) //gamma is same for C and P

Vega
blsvega(Price, Strike, Rate, Time, Volatility, Yield) //vega is same for C and P

Vanna
blsvanna(Price, Strike, Rate, Time, Volatility, Yield) //vanna is same for C and P

Volga
blsvolga(Price, Strike, Rate, Time, Volatility, Yield) //volga is same for C and P

Color
blscolor(Price, Strike, Rate, Time, Volatility, Yield) //color is same for C and P

Dual Gamma
blsdualgamma(Price, Strike, Rate, Time, Volatility, Yield) //dual gamma is same for C and P
Memanggil User Defined Function SQL dari C#
Kamu memanggilnya seperti kamu memanggil garis regular SQL code. Berikut codenya:
1 Dim conn As New SqlConnection(configurationManager.ConnectionStrings("conname").ConnectionString)
2 Dim cmd As New SqlCommand
3 Dim dr As SqlDataReader = Nothing
4 cmd.Connection = conn
5 cmd.CommandText = "select datbasename.dbo.functionname(@param1) as functionresult"
6 cmd.CommandType = CommandType.text
7 cmd.Parameters.AddWithValue("param1", "param1val")
8 dim yourresult as string
9 Try
10 conn.Open()
11 dr = cmd.ExecuteReader
12 If dr.HasRows Then
13 dr.Read()
14 yourresult = dr("functionResult")
15 end if
16 Catch ex As SqlException
17 Throw ex
18 Finally
19 conn.Close()
20 conn.Dispose()
21 cmd.Dispose()
22 If dr IsNot Nothing Then
23 dr.Close()
24 End If
25 End Try

User Defined Function Methods in C#
  1. Pengantar
Seperti yang Anda tahu program C # dibuat dengan satu atau lebih kelas. Kelas-kelas ini berisi kode sumber untuk melakukan beberapa tugas tertentu. Kami menulis kode yang biasanya di blok kecil yang disebut 'metode' atau dalam bahasa lain Anda dapat belajar subrutin, sub program, modul atau fungsi.
Anda mungkin sudah menyadari metode built-in seperti Math.sqrt (), Math.abs (), Console.WriteLine () dll. Dalam artikel ini kita akan membahas metode yang didefinisikan oleh pengguna. Berarti, bagaimana menulis sebuah metode!. Mengapa kita perlu menulis metode? Jawaban yang paling umum adalah - untuk menyimpan blok kode yang kita perlu menggunakan di banyak tempat dari sebuah program. Kami akan memanggil blok dengan nama tertentu dan menggunakannya di tempat yang diperlukan daripada menulis seluruh baris lagi dan lagi.
Dalam matematika Anda mungkin belajar ini:
y = f (x) - Berikut x adalah masukan dari proses dan y adalah output dari proses dan f adalah fungsi dari variabel x. Kita hanya bisa mengatakan "y adalah fungsi dari x".
Dalam C #, kita menggunakan format yang sama untuk metode ini adalah:
<access modifier> <return datatype> DisplayName (<datatype> myname)
{
<C# Code>;
}
public string DisplayName(string myname)

{
string greetings = "Good Morning " + myname;
return (greetings + "!");
}

Contoh pengubah akses yaitu public, protected, internal dll

Contoh tipe data int, String, float, bool dll

Akses pengubah dan tipe data berada di luar lingkup artikel ini jadi saya berhenti di sini dan lanjutkan dengan metode.

a). datatypes

Jenis data yang digunakan sebagai <return datatype> serta <datatype> sintaks dapat di setiap C # datatype serta ditetapkan pengguna jenis data. Hal ini dapat berupa array atau objek. Atau bahkan tidak perlu untuk mengembalikan nilai.

Jenis:
void
batal digunakan ketika metode tidak mengembalikan nilai. Perhatikan bahwa Anda tidak bisa lewat void sebagai parameter dalam metode.

  1. Pentingnya Main () metode
Main adalah metode wajib dalam setiap program C #. Apakah itu adalah jendela aplikasi atau aplikasi console, Anda tidak dapat menjalankan program tanpa Main () modul. Kita dapat mengatakan main () adalah titik awal dari program C #.
Seperti yang Anda tahu C # adalah bahasa sensitif kasus dan perhatikan M. dikapitalisasi Saya katakan ini karena kita memiliki huruf kecil main () di bahasa C / C + +.
Ada aturan tertentu untuk menggunakan Main ().
· Jenis kembali harus int .
· Main () harus memiliki modifier static

C. A.           Kembali lebih dari satu nilai dari sebuah metode

  Seperti yang Anda lihat di y = f (x), hanya dapat mengembalikan satu nilai. Dalam banyak bahasa ini adalah masalah. Orang menggunakan banyak cara curang untuk mencapai hal ini. Seperti kembali array, menggunakan variabel global, oleh objek kelas kembali, menggunakan ref dll Tapi di C # ada cara mudah untuk mencapai hal ini. Hal ini disebut 'keluar'. Dengan cara ini kita bisa menghilangkan semua kerugian dari menggunakan cara-cara alternatif.





Contoh berikut menunjukkan cara menggunakan:
Contoh 6 - Metode dengan beberapa nilai pengembalian

/ / Metode dengan beberapa nilai pengembalian
using System; 

class Program
 {
    private static void DoMath(int a, int b, out int sum, out int product, out double sqrt)
    {
        sum = a + b;
        product = a * b;
        sqrt  = Math.Sqrt(a);
    } 

    static void Main()
    {
        int sum1, product1;
        double sqrt1;

        DoMath(10,20, out sum1, out product1, out sqrt1); 

        Console.WriteLine("Sum = {0}\nProduct = {1}\nSquare = {2}" , sum1,product1,sqrt1);
    }
 }

Perhatikan penggunaan keluar. Anda harus menggunakannya di kedua deklarasi dan pernyataan menelepon.

D. Metode Overloading

  Dalam konsep Object Oriented Programming, ada satu konsep yang disebut polimorfisme. Hal ini memungkinkan nilai-nilai tipe data yang berbeda untuk ditangani menggunakan antarmuka seragam. Polimorfisme dalam C # dicapai dengan istilah yang disebut Overloading. Praktis mengatakan - mereka adalah metode yang berbeda dengan nama metode yang sama. Seperti 'metode' yang disebut 'metode overload'. Ketika skenario seperti timbul? Sebuah contoh kecil di bawah:

Dalam salah satu contoh kita sebelumnya, Sum () adalah metode untuk menemukan a + b. Anda melihat bahwa ini hanya membutuhkan nilai integer sebagai masukan dan nilai integer sebagai output. Apa yang terjadi jika Anda mencoba untuk melewati nilai ganda atau mengambang dengan metode ini? Anda akan mendapatkan dua kesalahan:

Metode kelebihan beban sesuai untuk 'Program.Sum (int, int)' memiliki beberapa argumen yang tidak valid

Hal ini dapat diatasi dengan menulis sebuah metode baru dengan parameter Anda tipe data yang diinginkan menggunakan nama metode yang sama.

E.    Jumlah tak terbatas parameter
            Pikirkan situasi di mana Anda ingin melewati jumlah yang tidak diketahui parameter. Mungkin 2 atau 3 atau nomor apapun. Di sini C # solusi adalah params. 

Tidak ada komentar:

Posting Komentar