.NET新手,几个小问题

sinzou1 2010-01-15 11:22:38
1 默认情况下,类型成员是隐式私有的,而类型是隐式内部的。如下的类定义自动设置为内部的,
而类型的默认构造函数自动设置为私有的。

class Radio
{
Radio(){}
}

"类型成员是隐式私有的,而类型是隐式内部的"怎么理解??


2、

namespace StaticMethods
{
class Teenager
{
public static Random r = new Random();

public static int GetRandomNumber(short upperLimit)
{
Console.WriteLine( r.Next(upperLimit));
return r.Next(upperLimit);
}

public static string Complain()
{
string[] messages = {"Do I have to?", "He started it!",
"I'm too tired...", "I hate school!",
"You are sooooooo wrong!"};
return messages[GetRandomNumber(5)];
}
}
}


静态成员只能操作静态数据或调用类的静态方法,如果你尝试在静态成员实现中使用非静态类数据或类非静态方法,则编译错误。

Complain() 是静态方法 为何包含 非静态数据 string[] message ???

public static Random r = new Random(); 自带的随机数类 Random 既然在此声明为静态的 ,为何还用它实例化?



3
FireThisMan(Employee emp);
Employee moon1=new Manager("Zappa",2,3001,200); //Manager派生自 Employee
FierThisMan(moon1);//FireThisMan是Program类中定义的方法

//不能通过编译
Object moon2=new Manager("Zappa",2,3001,200);
FireThisMan(moon2);
//改为 FireThisMan((Manager)moon2) 通过编译

这里Manager 相对于 Pbject 来说是派生类, 派生类强制转换基类 就不太理解了



以上问题,路过的哥们帮忙看看,小弟先谢过了!!!
...全文
257 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinzou1 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 projectdd 的回复:]
"类型成员是隐式私有的,而类型是隐式内部的"怎么理解??
--------------
就是说 类型是 你不写访问修饰的情况下,等同于 写了 internal访问修饰
而成员不写的情况等同于你写了 private那么
class a{
  a(){}
}
等同于
internal a{
  private a(){}
}
静态成员只能操作静态数据或调用类的静态方法,如果你尝试在静态成员实现中使用非静态类数据或类非静态方法,则编译错误。

Complain() 是静态方法 为何包含 非静态数据 string[] message ???

public static Random r = new Random(); 自带的随机数类 Random 既然在此声明为静态的 ,为何还用它实例化?
----------------------------------------
string[] mess...这个是在 方法内部定义的 “本地变量”  这里所谓的非静态数据是指,可用this指针 访问到的类成员
静态成员 Random这个本身是可实例化的一个类型 C#2.0中有一种类型叫做不能实例化的 static类型,
比如 : static class a{}, 但 一般的类型 可以成为 静态成员 比如这里的Random

这里Manager 相对于 Pbject 来说是派生类, 派生类强制转换基类 就不太理解了
--------------------------------------------------------------
派生类,也就是子类, 子类是基类的扩展,因此,子类可以转化基类,这不会超出范围,因为是扩展者向基本者的转换,但反过来不可以,会超出定义范围,
[/Quote]

太谢谢你的 耐心讲解了!!!!

“派生类,也就是子类, 子类是基类的扩展,因此,子类可以转化基类,这不会超出范围,因为是扩展者向基本者的转换,但反过来不可以,会超出定义范围,

以前看过些c++,c++ 中关于基类派生类的转化问题当时是这样理解的我(也一直在这样用,证明是正确的,也是从内存分配角度理解的):用基类强制转化派生类,因为派生类有基类(公共)部分;派生类是不可以强制转化基类的,因为基类没有派生类派生的那部分。

哥们你的解释c#这个,我们的出发点好像刚好相反!!!


2、
class AA {}
cladd BB:AA {}

AA aa=new AA();
BB bb=new BB();
Object oo=new Object();

bb is AA; // true
aa is BB; // false

oo is AA; // false
oo is BB; // false

aa is Object; // true
bb is Object; //true

基类对象(初Object实例)向上兼容其派生类型。 (按照你从“范围大小”出发的观点)

但Object的实例刚好相反
哥们有何高见啊??

方便的话加我啊QQ 410169815
ww564397990 2010-01-17
  • 打赏
  • 举报
回复
UP,虽然我不是太懂呵呵,偶也是新手,刚接触编程,希望大家以后多多指教啊
ProjectDD 2010-01-17
  • 打赏
  • 举报
回复
但Object的实例刚好相反
---------------------
没有哦,你可以这样试一下

object o=new object();// 构造 一个基类

Control c=(Control)o; //ERROR

这里想把一个基类实例 转换为它的子类形式,结果就会出错,如果你用as 那么结果就是null


Snowdust 2010-01-16
  • 打赏
  • 举报
回复
1.也就是说
class Radio
{
Radio(){}
}
相当于:
internal class Radio //internal表示只能在同一程序集中使用
{
private Radio(){}
}
2.静态成员只能操作静态数据或调用类的静态方法
其中的静态数据指的是类的静态数据,而string[] messages只是定义的局部变量,并不是类的静态数据
3.
派生类可以作为基类来使用,也就是说派生类可以强制转换成基类,当派生类写了基类的某些方法时,将使用派生类重写的方法。
qingyun27sc 2010-01-16
  • 打赏
  • 举报
回复
第一个的意思应该是在类里面定义 int a 等价于 private int a
fwlzsz 2010-01-16
  • 打赏
  • 举报
回复
楼上的精辟。。。
UP
  • 打赏
  • 举报
回复
up
Thr21ough 2010-01-16
  • 打赏
  • 举报
回复
UP~
风骑士之怒 2010-01-16
  • 打赏
  • 举报
回复
up
meng22623 2010-01-16
  • 打赏
  • 举报
回复
public 是访问修饰符 不是什么类型!!
林三一 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yanimaziba 的回复:]
这都是基本的静态类的知识
[/Quote]


同意
ch46485f 2010-01-16
  • 打赏
  • 举报
回复
1.也就是说
class Radio
{
Radio(){}
}
相当于:
internal class Radio //internal表示只能在同一程序集中使用
{
private Radio(){}
}
2.静态成员只能操作静态数据或调用类的静态方法
其中的静态数据指的是类的静态数据,而string[] messages只是定义的局部变量,并不是类的静态数据
3.
派生类可以作为基类来使用,也就是说派生类可以强制转换成基类,当派生类写了基类的某些方法时,将使用派生类重写的方法。




`````````````
ProjectDD 2010-01-16
  • 打赏
  • 举报
回复
"类型成员是隐式私有的,而类型是隐式内部的"怎么理解??
--------------
就是说 类型是 你不写访问修饰的情况下,等同于 写了 internal访问修饰
而成员不写的情况等同于你写了 private那么
class a{
a(){}
}
等同于
internal a{
private a(){}
}
静态成员只能操作静态数据或调用类的静态方法,如果你尝试在静态成员实现中使用非静态类数据或类非静态方法,则编译错误。

Complain() 是静态方法 为何包含 非静态数据 string[] message ???

public static Random r = new Random(); 自带的随机数类 Random 既然在此声明为静态的 ,为何还用它实例化?

----------------------------------------
string[] mess...这个是在 方法内部定义的 “本地变量” 这里所谓的非静态数据是指,可用this指针 访问到的类成员
静态成员 Random这个本身是可实例化的一个类型 C#2.0中有一种类型叫做不能实例化的 static类型,
比如 : static class a{}, 但 一般的类型 可以成为 静态成员 比如这里的Random

这里Manager 相对于 Pbject 来说是派生类, 派生类强制转换基类 就不太理解了
--------------------------------------------------------------
派生类,也就是子类, 子类是基类的扩展,因此,子类可以转化基类,这不会超出范围,因为是扩展者向基本者的转换,但反过来不可以,会超出定义范围,
jeven_xiao 2010-01-16
  • 打赏
  • 举报
回复
这都是基本的静态类的知识
cch5487614 2010-01-15
  • 打赏
  • 举报
回复
1.没有public属性 ,你无法在外部访问到类里面的方法和成员
2.如果你尝试在静态成员实现中使用非静态类数据或类非静态方法,则编译错误。 指的是类的非静态成员域和非静态成员方法。
3.FireThisMan()的参数当然要一致了,要不然找不到对应的函数的!
呵呵 希望楼主继续学习!.net开发起来很快的!
具体内容请参考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx 如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础的原创内容来回报大家。 C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,希望大家一起探讨,如有不对的地方还请大家多多包涵并指出来,我也是个新手,出错也是难免的。 首先先总结下自己知道的导出EXCEL表格的方法,大致有以下几种,有疏漏的请大家补充。 1.数据逐条逐条的写入EXCEL 2.通过OLEDB把EXCEL做为数据源来写 3.通过RANGE范围写入多行多列内存数据到EXCEL 4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大时所要付出的时间也是巨大的,后面3种方法都是第一种的衍生,在第一种方法效率低下的基础上改进的,这里主要就是一个效率问题了,当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件条件下单从软件角度出发探讨较好的解决方案。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧