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
- using System;
- using System.Runtime.InteropServices;
- using Microsoft.Win32;
- namespace BlackScholesAddin
- {
- [ClassInterface(ClassInterfaceType.AutoDual)]
- [ComVisible(true)]
- public class Functions
- {
- public Functions()
- {
- }
- //cumulative normal distribution function
- private double CND(double X)
- {
- double L = 0.0;
- double K = 0.0;
- double dCND = 0.0;
- const double a1 = 0.31938153;
- const double a2 = -0.356563782;
- const double a3 = 1.781477937;
- const double a4 = -1.821255978;
- const double a5 = 1.330274429;
- L = Math.Abs(X);
- K = 1.0 / (1.0 + 0.2316419 * L);
- dCND = 1.0 - 1.0 / Math.Sqrt(2 * Convert.ToDouble(Math.PI.ToString())) *
- Math.Exp(-L * L / 2.0) * (a1 * K + a2 * K * K + a3 * Math.Pow(K, 3.0) +
- a4 * Math.Pow(K, 4.0) + a5 * Math.Pow(K, 5.0));
- if (X < 0)
- {
- return 1.0 - dCND;
- }
- else
- {
- return dCND;
- }
- }
- //function phi
- private double phi(double x)
- {
- double phi = 0.0;
- phi = Math.Exp(-x * x / 2) / Math.Sqrt(2 * Math.PI);
- return phi;
- }
- //implied volatility using Newton-Raphson method
- public double blsimpvCall(double Price, double Strike, double Rate, double Time, double Value, double Yield)
- {
- const double ACCURACY = 1.0e-6;
- double ComputedVolatility = Math.Pow(Math.Abs(Math.Log(Price / Strike) + Rate * Time) * 2 / Time, 0.5); // initial value of volatility
- double ComputedValue = blsCall(Price, Strike, Rate, Time, ComputedVolatility, Yield);
- double Vega = blsvega(Price, Strike, Rate, Time, ComputedVolatility, Yield);
- while (Math.Abs(Value - ComputedValue) > ACCURACY)
- {
- ComputedVolatility = ComputedVolatility - ((ComputedValue - Value) / Vega);
- ComputedValue = blsCall(Price, Strike, Rate, Time, ComputedVolatility, Yield);
- Vega = blsvega(Price, Strike, Rate, Time, ComputedVolatility, Yield);
- }
- return ComputedVolatility;
- }
- public double blsimpvPut(double Price, double Strike, double Rate, double Time, double Value, double Yield)
- {
- const double ACCURACY = 1.0e-6;
- double ComputedVolatility = Math.Pow(Math.Abs(Math.Log(Price / Strike) + Rate * Time) * 2 / Time, 0.5); // initial value of volatility
- double ComputedValue = blsPut(Price, Strike, Rate, Time, ComputedVolatility, Yield);
- double Vega = blsvega(Price, Strike, Rate, Time, ComputedVolatility, Yield);
- while (Math.Abs(Value - ComputedValue) > ACCURACY)
- {
- ComputedVolatility = ComputedVolatility - ((ComputedValue - Value) / Vega);
- ComputedValue = blsPut(Price, Strike, Rate, Time, ComputedVolatility, Yield);
- Vega = blsvega(Price, Strike, Rate, Time, ComputedVolatility, Yield);
- }
- return ComputedVolatility;
- }
- //Call pricer
- public double blsCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double Call = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- Call = Price * Math.Exp(-Yield * Time) * CND(d1) - Strike * Math.Exp(-Rate * Time) * CND(d2);
- return Call;
- }
- //Put pricer
- public double blsPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double Put = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- Put = Strike * Math.Exp(-Rate * Time) * CND(-d2) - Price * Math.Exp(-Yield * Time) * CND(-d1);
- return Put;
- }
- //delta for Call
- public double blsdeltaCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- return Math.Exp(-Yield * Time) * CND(d1);
- }
- //delta for Put
- public double blsdeltaPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- return Math.Exp(-Yield * Time) * CND(d1) - 1;
- }
- //gamma is the same for Put and Call
- public double blsgamma(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- return Math.Exp(-Yield * Time) * phi(d1) / (Price * Volatility * Math.Sqrt(Time));
- }
- //vega is the same for Put and Call
- public double blsvega(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- return Price * Math.Exp(-Yield * Time) * phi(d1) * Math.Sqrt(Time);
- }
- //theta for Call
- public double blsthetaCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- 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);
- }
- //theta for Put
- public double blsthetaPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- 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);
- }
- //rho for Call
- public double blsrhoCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- return Strike * Time * Math.Exp(-Rate * Time) * CND(d2);
- }
- //rho for Put
- public double blsrhoPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- return -Strike * Time * Math.Exp(-Rate * Time) * CND(-d2);
- }
- //volga is the same for Call and Put
- public double blsvolga(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- return Price * Math.Exp(-Yield * Time) * phi(d1) * Math.Sqrt(Time) * d1 * d2 / Volatility;
- }
- //vanna is the same for Call and Put
- public double blsvanna(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double vanna = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- vanna = -Math.Exp(-Yield * Time) * phi(d1) * d2 / Volatility;
- return vanna;
- }
- //charm for Call
- public double blscharmCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double charmC = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- 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));
- return charmC;
- }
- //charm for Put
- public double blscharmPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double charmP = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- 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));
- return charmP;
- }
- //color is the same for Call and Put
- public double blscolor(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double color = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- 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)));
- return color;
- }
- //dual delta for Call
- public double blsdualdeltaCall(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double ddelta = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- ddelta = -Math.Exp(-Rate * Time) * CND(d2);
- return ddelta;
- }
- //dual delta for Put
- public double blsdualdeltaPut(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double ddelta = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- ddelta = Math.Exp(-Rate * Time) * CND(-d2);
- return ddelta;
- }
- //dual gamma is the same for Call and Put
- public double blsdualgamma(double Price, double Strike, double Rate, double Time, double Volatility, double Yield)
- {
- double d1 = 0.0;
- double d2 = 0.0;
- double dgamma = 0.0;
- d1 = (Math.Log(Price / Strike) + (Rate - Yield + Volatility * Volatility / 2.0) * Time) / (Volatility * Math.Sqrt(Time));
- d2 = d1 - Volatility * Math.Sqrt(Time);
- dgamma = Math.Exp(-Rate * Time) * phi(d2) / (Strike * Volatility * Math.Sqrt(Time));
- return dgamma;
- }
- [ComRegisterFunctionAttribute]
- public static void RegisterFunction(Type type)
- {
- Registry.ClassesRoot.CreateSubKey(
- GetSubKeyName(type, "Programmable"));
- RegistryKey key = Registry.ClassesRoot.OpenSubKey(
- GetSubKeyName(type, "InprocServer32"), true);
- key.SetValue("",
- System.Environment.SystemDirectory + @"\mscoree.dll",
- RegistryValueKind.String);
- }
- [ComUnregisterFunctionAttribute]
- public static void UnregisterFunction(Type type)
- {
- Registry.ClassesRoot.DeleteSubKey(
- GetSubKeyName(type, "Programmable"), false);
- }
- private static string GetSubKeyName(Type type,
- string subKeyName)
- {
- System.Text.StringBuilder s =
- new System.Text.StringBuilder();
- s.Append(@"CLSID\{");
- s.Append(type.GUID.ToString().ToUpper());
- s.Append(@"}\");
- s.Append(subKeyName);
- return s.ToString();
- }
- }
- }
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#
- 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.
- 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
Hal ini dapat diatasi
dengan menulis sebuah metode baru dengan parameter Anda tipe data yang
diinginkan menggunakan nama metode yang sama.
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
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