类的那些事(包含智能提示小图标,与对象的关系等)

2024-01-04 14:38

本文主要是介绍类的那些事(包含智能提示小图标,与对象的关系等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C#类、对象、方法和属性详解 http://www.cnblogs.com/q1092813103/p/5660367.html

一、什么是类?什么是对象?
类(Class)实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。
简单地说,类是一种抽象的数据类型,是对一类对象的统一描述。在生活中,我们常常会把一组具有相同特性的事物归为一类,当然根据分类的标准不同,划分的类也是不相同的。汽车和人都是独立的类,它们都有各自的特点。汽车这个大类还可以分为卡车,公共汽车,和小轿车等各种小类。人可以分为男人和女人。将这些思想反映在编程技术中就产生了类的概念。
类是对象概念在面向对象编程语言中的反映,是相同对象的集合。类描述了一系列在概念上有相同含义的对象,为这些对象统一定义了编程语言上的属性和方法。
 类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都象一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值。
类是C#能最为强大的数据类型。类定义了数据类型的数据和行为。
二、类和对象之间的关系
类是具有相同数据结构(属性)和相同操作功能(行为)对象的集合。对象就是符合某种类所产生的一个实例。对象与类的关系是:
对象的共性抽象为类,类的实例化就是对象。
类是一个抽象的概念,而对象是具体的,比如说车是一个类的话,张三的那辆奔驰车就是车这个类的一个实例,动物是一个类的话,李四的家养的那只猫就是动物类的一个对象实例。
人类就是一个类,这个类包含了所有人的共同属性,像有四肢,有名字,会吃喝拉撒,会睡觉等等。而实例就是这个人类的具体实现,比如叫张三的这个人就是人类的一个实例,张三有着人类的所有属性。张三是人类的一个实例,同样李四也是人类的一个实例,但是张三和李四是不同的,因为他们是人类的两个不同的实例,比如:张三的名字是“张三”,性别是“男”,而李四的名字是“李四”,性别是“女",他们虽然都有姓名,都有性别,但是其具体表现不同。
对象是类的一个实例它具有确定的属性,如张三(人的实例)身高180,体重70公斤,大学本科,男,23岁,汉族。
人类只有一个,人类的实例可以有无数个,当然包括你我他。
对象可以被创建和销毁,但类是无所不在的(因为类是面向对象编程的基本组成单位)。
初学者往往混淆类和对象的关系,实际上它们之间是蓝图和产品的关系。类就是一张蓝图,它规定对象具有哪些特征。而对象就是根据这张蓝图生产出来的产品。同一个类产生的对象也是这样,它们具有同样的结构,却可能在某些特性上有不同之处。
例如,桌子是一个类,人们不断打造各种尺寸和风格(属性)的桌子(桌子的实例),打造桌子,又不断毁坏桌子,年复一年,旧的去了,新的又来,但桌子的概念没变,它是一个抽象的概念。应该称它为桌子类,以区别于打造的具体桌子。
类的那些事

编写更好的C#代码
http://www.cnblogs.com/gaochundong/archive/2013/06/03/practice_to_write_better_csharp_code.html

各种命名空间的解释:
此处仅举一例:
System.Data.OleDb 命名空间  https://msdn.microsoft.com/zh-cn/library/system.data.oledb(VS.80).aspx

“类视图”和“对象浏览器”图标 https://msdn.microsoft.com/zh-cn/library/y47ychfe.aspx
“类视图”和“对象浏览器”显示一些图标,这些图标表示代码实体,例如命名空间、类、函数和变量。下表以图文并茂的形式说明了这些图标。
 
图标 说明 图标 说明
命名空间符号 命名空间 声明符号 方法或函数
“类”图标 运算符符号 运算符
棒棒糖形状的接口符号 接口 属性符号 属性
结构符号 结构 “字段”图标 字段或变量
联合符号 Union 事件符号 Event
枚举符号 Enum “常量”图标 常量
类型定义符号 TypeDef 枚举项符号 枚举项
Visual Studio 模块符号 模块 映射项符号 映射项
扩展方法符号 扩展方法 声明符号 外部声明
委托符号 委托 类视图和对象浏览器的“错误”图标 错误
异常符号 异常 模板符号 模板
映射符号 映射 错误感叹号符号 未知
“类型转发”符号 类型转发  

信号图标

以下信号图标适用于前面的所有图标,指示它们的可访问性。

System_CAPS_ICON_note.jpg 说明

如果项目包含在源代码管理数据库中,则可能会显示其他信号图标来指示源代码管理的状态,如签入或签出。

图标 说明
<无信号图标> 公共。可从该组件内的任何地方访问或从任何引用它的组件访问。
信号 Protected 符号 受保护。可从包含类或类型内访问或从由包含类或类型派生的类或类型内访问。
信号 Private 符号 私有。仅可在包含类或类型内访问。
信号 Sealed 符号 密封。
信号 Friend/Internal 符号 朋友/内部。仅可以从此项目内访问。
信号图标箭头 快捷方式。对象的快捷方式

Web应用程序每个页面类都会自动加上一个命名空间,而网站页面类不会。
Web应用程序的区别
1.页面的C#代码(后台文件代码)一旦发生修改,需要手动重新编译(生成)一下,生成新的网站程序集(.dll),否则不会运行新代码
2.再次强调,无论是【网站】,还是【网站应用程序】,最终还是被编译成程序集使用的。也就是说,我们所谓的【动态页面】(aspx/ashx)都是网站程序集里的类而已。

Web应用程序每个页面类都会自动加上一个命名空间,而网站页面类不会。


在c#中知道了要用的类怎么找它所对应的 命名空间? msdn里面有提示么?

c#中using system这些不是引用的类吗,怎么叫引用命名空间?
引入了命名空间,就可以直接使用这些名字 “空间内” 的 “类” 及其方法属性了
追问
那有时候system后面加个点然后又是一个字符串,那个代表引用的是什么
追答
比如 using System.Net.Sockets;
System 下的 Net 下的 Sockets
C#中的类是利用命名空间组织起来的。命名空间提供了一种从逻辑上组织类的方式,防止命名冲突。

server.mappath需要using什么命名空间

这样就可以用上了.
System.Web.HttpContext.Current.Server.MapPath()
在普通的CS文件中是不能直接用Server的,加命名空间也没有用,这能这么用,其他的request,response.cache.都是这样
using System;
using System.Xml;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Web.UI.Page.Server;
using DBUtility;
using Model;
using System.Web;
using System.Web.UI;
namespace SQLServerDAL
{
class photoshowDAL
{
public void WriteXml()
{
System.Web.HttpContext.Current.Server.MapPath()
}
}
}


成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
简单来说:例如定义一个类:
class Text
{
public static int number;
public int temp;
}
如果你想访问temp属性,你就必须先创建一个Text的对象,才能访问:Text b = new Text();
b.temp;这就是实例成员变量。
而你想访问number的话,不用创建Text的实例就可以访问,就像这样:Text.number.这就是类成员变量。
主要区别就是访问是需不需要创建对象,而对于类成员变量,所有对象是共享一个变量的。
注意问题: 
using newClasses;//已经打开类库,类库中有superUserInfo这个类。
执行语句:  superUserInfo su1 = Session["userInfo"];
提示错误: 错误 1 无法将类型“object”隐式转换为“newClass.superUserInfo”。存在一个显式转换(是否缺少强制转换?) 

改成:superUserInfo su = (superUserInfo)Session["userInfo"];
问题解决!
 显式转换、隐式转换
一般情况下,数据的类型的转换通常是由编译系统自动进行的,不需要人工干预,所以被称为隐式类型转换。但如果程序要求一定要将某一类型的数据转换为另外一种类型,则可以利用强制类型转换运算符进行转换,这种强制转换过程称为显式转换。
目录

(强制的类型名)表达式
用于强行将“表达式”的值转换成“类型名”所表示的数据类型。例如,(int)4.2的结果是4;强制类型转换的目的是使表达式的值的数据类型发生改变,从而使不同类型数据之间的运算能够进行下去。
应用情况编辑
如果表达式仅是单个常量或变量,则常量或变量不必用圆括号括起来;但是如果是含有运算符的表达式,则必须利用括号将其统一,否则容易发生歧义。例如:
(float)(a+b)
(int)a+b
经强制类型转换后仅产生一个临时的、类型不同的数据继续参加运算,其常量、变量或表达式的原有类型以及原来数据值均不改变。例如:
int x;
(float)x;
此时x的值被强制转换位实型参与下一步的运算处理,但并不改变x类型的是整型。
由于类型转换将占用系统时间,过多的转换将降低程序的运行效率。再设计程序时应尽量选择好数据类型,以减少不必要的类型转换。
_______________________________________________________________________________
成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别

类体的定义包括成员变量的定义和方法的定义。
1、成员变量包括实例变量和类变量;而成员方法包括实例方法、类方法,当然还有一种特殊的构造方法。
2、类变量、类方法就是类中的变量、方法,必须是静态的,要加static;故其又称静态变量、静态方法。
3、成员变量、成员方法是对象或实例中的变量、方法,不加static;

类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性,在内存中只有一个地方存储这个变量。而且所有的实例都可以修改这个类变量的值(前提是这个类变量没有被final修饰,否则是常量了),而且访问类变量的时候不用实例,直接用类就可以了。
类方法:和类变量一样,可以不用实例,直接用类就可以调用类方法。
实例变量:实例域,实例字段,或叫成员变量。
实例方法:或叫成员方法,必须先有实例,然后才能通过实例调用该实例方法。
使用方法:类方法可以直接调用类变量和类方法
               类方法不可以直接调用实例变量和实例方法
                类方法中没有this,因为没有实例,this不知道调用哪个实例
               类方法可以从类里面直接访问类成员
               实例方法可以调用类方法,访问类变量,但是不提倡这样做,会把类方法和类变量混淆成实例方法和实例变量
程序实例:
class AnIntegerNamedX {
    int x;       //这个是成员变量
     public int x() {     //成员方法
            return x;
   }
   public void setX(int newX) {        //成员方法
            x = newX;
    }
}
public class Practice{
   public static void main(String args[]){
          AnIntegerNamedX myX = new AnIntegerNamedX();
          AnIntegerNamedX anotherX = new AnIntegerNamedX();
           myX.setX(1);
            anotherX.x = 2;
          System.out.println("myX.x = " + myX.x());
         System.out.println("anotherX.x = " + anotherX.x());
   }
}
2:
class AnIntegerNamedX {
   static int x;            //这里写成static,结果就变成全是2了,因为类变量是被实例所共享的,包括myX和anotherX
                                  调用anotherX时所有的所有实例都改变了。
public int x() {
         return x;
}
public void setX(int newX) {
       x = newX;
}
}
public class Practice{
     public static void main(String args[]){
           AnIntegerNamedX myX = new AnIntegerNamedX();
            AnIntegerNamedX anotherX = new AnIntegerNamedX();
            myX.setX(1);
            anotherX.x = 2;         //这里把X的值改成2,所有实例的X都是2了,因为类变量是被所有实例共享的,任何实
                                              例都可以对类变量做最终的修改
             System.out.println("myX.x = " + myX.x());
             System.out.println("anotherX.x = " + anotherX.x());
      }
}
      
3:同样的,当把那两个方法都加上static变成类方法的时候,会提示错误让你把X变成静态,是应为类方法不能直接访问实例变量!     
类变量 也叫 静态变量 ,也就是在变量前加了static的变量;  实例变量 也叫对象变量,即没加static的变量;区别在于:类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;

C++中定义类的对象:用new和不用new有何区别?

举个简单的例子:
class Point
{
private:
int x;
int y;
public:
void Set(int a,int b)
{ x=a; y=b; }
void Print()
{ cout<<"("<<x<<","<<y<<")"<<endl; }
};

void main()
{
Point p1;
Point *p2=new Point();
p1.Set(1,2);
p2->Set(4,5);

p1.Print();
p2->Print();
delete p2;
}
对象p1,p2的定义方式有何本质不同?用哪种方式比较好?

p1有系统创建并释放,你不要担心会出现内存泄露,但是生命期只有在本区域的大括号内,出了大括号就没用了。P2是指针,要自己释放,用不好很危险,用好了功能强大,因为他可以赋值给全局的变量,一下子从局部变量变成全局变量,还能把对象作为函数返回值。



析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

析构函数简介
以C++语言为例:[1] 析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作。所以许多简单的类中没有用显示的析构函数。

这篇关于类的那些事(包含智能提示小图标,与对象的关系等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569647

相关文章

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

电脑提示msvcp90.dll缺少怎么办? MSVCP90.dll文件丢失的修复方法

《电脑提示msvcp90.dll缺少怎么办?MSVCP90.dll文件丢失的修复方法》今天我想和大家分享的主题是关于在使用软件时遇到的一个问题——msvcp90.dll丢失,相信很多老师在使用电脑时... 在计算机使用过程中,可能会遇到 MSVCP90.dll 丢失的问题。MSVCP90.dll 是 Mic

电脑开机提示krpt.dll丢失怎么解决? krpt.dll文件缺失的多种解决办法

《电脑开机提示krpt.dll丢失怎么解决?krpt.dll文件缺失的多种解决办法》krpt.dll是Windows操作系统中的一个动态链接库文件,它对于系统的正常运行起着重要的作用,本文将详细介绍... 在使用 Windows 操作系统的过程中,用户有时会遇到各种错误提示,其中“找不到 krpt.dll”

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C