.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 来说是派生类, 派生类强制转换基类 就不太理解了



以上问题,路过的哥们帮忙看看,小弟先谢过了!!!
...全文
251 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开发起来很快的!

111,120

社区成员

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

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

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