Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中,OOP的数据类型是什么???他们在上课吗?_C#_Oop_Class_Object - Fatal编程技术网

C# 在c语言中,OOP的数据类型是什么???他们在上课吗?

C# 在c语言中,OOP的数据类型是什么???他们在上课吗?,c#,oop,class,object,C#,Oop,Class,Object,我创建的每个类都需要NEW关键字来实例化它。我想知道Oledbconnection是否是一个类(因为它需要一个新的关键字)???如果是,那么是int、bool、char还是类??? 我只需要澄清我的概念 在C#中,我们有“值类型”,即int、double、decimal、enum、structs和“引用类型”——这些都是类。在.NET中,大多数类型都是从类的对象派生而来的。因此,您可以说所有这些都是类,但其中一些派生自ValueType,其行为与引用类型不同。大多数人在谈论类时都会提到引用类型。

我创建的每个类都需要NEW关键字来实例化它。我想知道Oledbconnection是否是一个类(因为它需要一个新的关键字)???如果是,那么是int、bool、char还是类???
我只需要澄清我的概念

在C#中,我们有“值类型”,即int、double、decimal、enum、structs和“引用类型”——这些都是类。

在.NET中,大多数类型都是从类的对象派生而来的。因此,您可以说所有这些都是类,但其中一些派生自ValueType,其行为与引用类型不同。大多数人在谈论类时都会提到引用类型。在这方面,诸如int、bool和任何(其他)结构的值类型都不是类

接口既不是类,也不是结构/值类型,而是接口

int x=0//由0表示的对象的类型为int,它是ValueType x、 ToString()//ToString由基类对象实现,基类对象是一个类 (i可比较)x)。与(1)相比//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;
公共结构Foo{
公共int x;
公共食物(int x){
这个.x=x;
}
}
//价值语义学
Foo x=新Foo(1)
fooy=x;
//引用语义学
对象xx=新对象();
对象yy=xx

Object.ReferenceEquals(x,y);// 用面向对象的术语来说,这些都是“类”。它们是否需要新的关键字、值类型机制等都是C语言的实现细节,而不是OOP概念。在概念层面上,是的,它们都是OO意义上的类

在C#中,OOP术语“类”分为两种类型,普通类和结构。普通类被视为引用类型,而结构被视为值类型(有关差异的讨论,请参阅)


您提到的基本类型(int、bool、char)是结构的别名。这基本上意味着在幕后,编译器会为您创建结构类型的新实例。例如,int是System.Int32的别名,因此可以互换使用这两个别名。这又是一个实现细节——这并不意味着它们不是类,它只是意味着编译器正在试图简化事情,让您的生活更轻松。

请阅读。此外,严肃地说,我不能问一个困扰我的问题吗???我知道我的结构不够好,但我写了我有问题的东西。。。仅仅因为你们知道所有这些东西并不意味着你们可以把初学者的问题标记为不清楚。这只是阻止我热爱编程的一种方式。。。。谢谢大家回答这个问题,不管你们是多么愚蠢或简单。问题不是你们的问题想法不好(我觉得这很合理),而是太模糊了。你的问题的措词方式并不能立即说明你在问什么,这是它关闭的主要原因。因此,你的意思是,在对象之后有两种类型,即引用类型和值类型。类是引用类型的细分???而值类型是完全不同的东西???是的,基本上。你必须小心使用“类”这个词。在OO术语中,类只是一个实体,它的属性和行为由您创建实例。您列出的所有内容都符合该定义,因此它们都是OO意义上的类。在C#中,类分为引用类型和值类型。让人困惑的是,他们称引用类型为类,尽管引用类型和值类型都符合类的OO定义。谢谢,这正是我想要的。OO没有类的概念,在它本身就是C#实现细节(它与其他语言共享的细节)。这是面向对象的,而不是面向类的。JavaScript是面向对象的(一种函数),在JS中没有类的概念。同样的道理也适用于中国SmallTalk@RuneFS那不是真的。OO原则明确地概述了类的理论(参见或更正式地说,参见)。另外,JS绝对不是面向对象的。如果接口是一种数据类型,那么就创建一个接口实例;)int、double等都实现了接口,因此可以通过接口类型查看这些类型的对象。你回答了我的问题,消除了我的疑虑。谢谢兄弟
 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!");
}