2016-07-05 2 views
-3

標準タイプに基づいた独自のタイプが必要です。標準タイプに基づく独自のタイプ

たとえば、int型として動作するDzeta型が必要です。

Dzeta i = 0; 
i++; 

など:

は、だから私はこのような何かを書きたいです。

どうすればいいですか?

+0

'struct'。それはGoogleです。 –

+3

また、怠け者にしないでください。例えば ​​"Fe"ではなく "for example"と入力し、 "smth"ではなく "something"と入力します。 –

答えて

3

任意の値型(構造体)から派生することはできません。 あなただけ独自に作成することができます:あなたがする必要がある場合は、よりである

public struct Dzeta 
{ 

} 

何を、あなたは、演算子をオーバーロードすることができます

public static Dzeta operator +(Dzeta dz1, Dzeta dz2) 
{ 
    return new Dzeta (/* some operations */); 
} 

int型である場合、あなたのクラスを使用することができますので、あなたはまた、キャスト演算子をオーバーロードすることができます使用(キャストが自動的に行われますBY):その後、

public static explicit operator int(Dzeta d) 
{ 
    //return some int 
} 

int a = new Dzeta(); //implicit cast was made! 
0

それらが密封されているので、あなたはクラスではなく、基本型のほとんどを継承することができます。

は、この記事を見てみましょう: c# deriving from int32

相続について読むのも良いアイデアです。もしあなたがC#のようなオブジェクト指向言語で作業したいのなら、あなたはそれが必要でしょう:

0

私はクラスをこのように振る舞わせるために拡張子と上書きを使います。

/* A class that behaves a lot like an int */ 
public class Dzeta 
{ 
    private int __dzeta; 
    public Dzeta() { } 
    public Dzeta(int i) 
    { 
     this.__dzeta = i; 
    } 

    public static Dzeta operator +(Dzeta a, Dzeta b) 
    { 
     var c = new Dzeta(a.__dzeta + b.__dzeta); 
     return c; 
    } 
    public static Dzeta operator -(Dzeta a, Dzeta b) 
    { 
     var c = new Dzeta(a.__dzeta - b.__dzeta); 
     return c; 
    } 
    public static Dzeta operator +(Dzeta a, int b) 
    { 
     var c = new Dzeta(a.__dzeta + b); 
     return c; 
    } 
    public static Dzeta operator -(Dzeta a, int b) 
    { 
     var c = new Dzeta(a.__dzeta - b); 
     return c; 
    } 
    public override string ToString() 
    { 
     return __dzeta.ToString(); 
    } 

} 
/* Extend the int like behaviors of my DZeta class*/ 
public static class DZExtensions 
{ 
    public static Dzeta Sum(this Dzeta self, params Dzeta[] all) 
    { 
     var z = new Dzeta(); 
     foreach (var dz in all) 
      z += dz; 
     return z; 
    } 
    public static Dzeta Sum(this Dzeta self, params int[] all) 
    { 
     var z = new Dzeta(); 
     foreach (var dz in all) 
      z += dz; 
     return z; 
    } 
} 



/* This is how it can be used in the application*/ 
public class UsageOfDZeta 
{ 
    public void DoSomeDZetaWork() 
    { 
     var zz = new Dzeta(5); 
     System.Diagnostics.Debug.WriteLine(zz);  // prints 5 
     zz += 15; 
     System.Diagnostics.Debug.WriteLine(zz);  // prints 20 
     zz.Sum(10, 5, 20, 5); 
     System.Diagnostics.Debug.WriteLine(zz);  // prints 60 
    } 
} 
関連する問題