-1

私が作成するすべてのクラスは、それをインスタンス化するためにNEWキーワードを必要とします。それでは、Oledbconnectionはクラスなのだろうか(新しいキーワードが必要なため)??? もしそうなら、int、bool、charもクラスですか?自分のコンセプトをクリアする必要があります。

4

3 に答える 3

2

.NETのほとんどの型は、クラスであるオブジェクトから派生します。したがって、これらはすべてクラスであると言えますが、それらの一部は、参照型とは異なる動作をするValueTypeから派生しています。そして、参照型は、ほとんどの人がクラスについて話すときに参照するものです。その点で、int、bool、その他の(その他の)構造体などの値型はクラスではありません。

インターフェイスはクラスでも構造体/ValueTypeでもありません。インターフェイスです。

int x = 0; // 0で表されるオブジェクトは、ValueType x.ToString();であるint型です。// ToStringは、クラス(IComparable)x).CompareTo(1);である基本型Objectによって実装されます。//System.Int32はそのインターフェースを実装します

ボクシングはさておき、上記は、オブジェクトの表示方法に応じて、オブジェクトがValueType、Class、またはinterfaceの両方として分類される可能性があることを示しています。

本当に心配するのは、何かがクラスなのか、インターフェースなのか、それとも他の何かなのかということではありません。見方によっては、ほとんどのオブジェクトが複数のセットに含まれているためです。覚えておくべき重要なことは、何かが値セマンティクス(構造体/値タイプ)または参照セマンティクスを持っているかどうかです。値のセマンティクスを持つものを他の何かに割り当てると、コピーが作成されます。一方、参照セマンティクスを持つものを割り当てる場合は、単にエイリアシングしているだけです

public struct Foo{
   public int x;
   public Foo(int x){
       this.x = x;
   }
}

//value semantics
Foo x = new Foo(1)
Foo y = x;

//reference semantics
object xx = new object();
object yy = xx

Object.ReferenceEquals(x,y); // <-- returns false;
Object.ReferenceEquals(xx,yY); // <-- returns true;

注意しないと、値型を参照セマンティクスがあるかのように扱うときに、バグを見つけるのが難しい場合があります。

 public class Baz {
     private Foo _myFoo = new Foo(1);
     public Foo MyFoo {
         get{
            return _myFoo;
         }
     }
 }

Foo bar = new Baz();
bar.MyFoo.x = 789; // <-- returning a copy of _myFoo not a reference to that object
if(barMyFoo.x == 1){
   Console.WriteLine("This will be written to console because bar.x is 1!");
}
于 2012-10-31T13:06:45.147 に答える
1

OOP用語では、これらはすべて「クラス」です。新しいキーワードや値型の仕組みなどが必要かどうかは、すべてC#言語の実装の詳細であり、OOPの概念ではありません。概念レベルでは、はい、それらはすべてOOの意味でのクラスです。

C#では、OOP用語「クラス」は、通常のクラスと構造体の2つのタイプに分けられます。通常のクラスは参照型として扱われ、構造体は値型として扱われます(違いの説明については、ここを参照してください)。

あなたが言及するプリミティブ型(int、bool、char)は、構造体のエイリアスです。これは基本的に舞台裏を意味し、コンパイラは構造体型の新しいインスタンスを作成します。たとえば、intはSystem.Int32のエイリアスであるため、この2つを同じ意味で使用できます。これも実装の詳細です。クラスではないという意味ではなく、コンパイラが物事を単純化し、作業を楽にしようとしていることを意味します。

于 2012-10-31T13:08:55.190 に答える
0

C#には、「値型」があります。int、double、decimal、enums、structs、および「参照型」-これらはクラスです。

于 2012-10-31T13:05:07.530 に答える