从0开始编程

lgxysl 2008-11-28 03:15:34
整天在用.NET的基类,但对这些基类是如何写成的却知之甚少.大家是否可以来讨论一下.
从最根本的开始,Object类是基类的根,有谁有它的源代码?贴出来看看?
如果什么基类也不用,有谁可以写出文本框类(TextBox),有谁知道它的源代码?能否贴出来看看?
...全文
124 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
dishiyicijinqiu 2012-01-20
  • 打赏
  • 举报
回复
即便用了这个反编译工具有些东西还是查不到的,就算源代码没有使用混沌。比如说GetType()等,使用非托管代码的方法。[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
public extern Type GetType();

这是反编译的源码。
number1170196649 2011-09-07
  • 打赏
  • 举报
回复
学习了。
龙宜坡 2008-11-30
  • 打赏
  • 举报
回复
用反编译工具查看System.dll.....源代码太多了
king19840811 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Foxer 的回复:]
Object源代码

C# code
[Serializable, ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class Object
{
// Methods
public virtual bool Equals(object obj)
{
return InternalEquals(this, obj);
}

public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(o…
[/Quote]
mjjzg 2008-11-28
  • 打赏
  • 举报
回复
C#已经将它给封装起来了,如果你真想知道,也许去MSDN上能查到一些,但是微软向来都是这样,很少公布原代码的,还是要靠自己去钻研了
yanrabbit163 2008-11-28
  • 打赏
  • 举报
回复
再不要发明轮子了
lgxysl 2008-11-28
  • 打赏
  • 举报
回复
你了解Object的源码,又能有什么用呢?
-------------------------------------
准备开发C#编译器移动设备(手机版)
lgxysl 2008-11-28
  • 打赏
  • 举报
回复
你了解Object的源码,又能有什么用呢?
-----------------------------------------
知其所以然是为了更好地知其然,你说有什么用呢?
lgxysl 2008-11-28
  • 打赏
  • 举报
回复
听说过Reflector吗?
有了它,.NET framework源代码随你看
另外,.NET framework已经可以看到源代码了,到网上找找资料吧,不过要用VS2008才行。
----------------------------------------------------------------------------
已下载Reflector,十分感激!
yanrabbit163 2008-11-28
  • 打赏
  • 举报
回复
你了解Object的源码,又能有什么用呢?
lgxysl 2008-11-28
  • 打赏
  • 举报
回复
听说过Reflector吗?
有了它,.NET framework源代码随你看
另外,.NET framework已经可以看到源代码了,到网上找找资料吧,不过要用VS2008才行。
----------------------------------------------------------------------------
多谢了!
wuyq11 2008-11-28
  • 打赏
  • 举报
回复
Object 类是一个超级类,是一切类的父类
没有object,应该写不出TEXTBOX
浮生若梦丶 2008-11-28
  • 打赏
  • 举报
回复
我先把当前的事做好到
Dobzhansky 2008-11-28
  • 打赏
  • 举报
回复
MFC / VCL 都有中文的牛书剖析过了, .net 库会不会有呢?
Foxer 2008-11-28
  • 打赏
  • 举报
回复
TextBox就不贴了,太长
而且TextBox继承自更长的TextBoxBase
而TextBoxBase继承自超级长的Control,Control还要继承自Component和一大堆接口
估计看完整了要几万行代码
Foxer 2008-11-28
  • 打赏
  • 举报
回复
Object源代码

[Serializable, ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class Object
{
// Methods
public virtual bool Equals(object obj)
{
return InternalEquals(this, obj);
}

public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}

private void FieldGetter(string typeName, string fieldName, ref object val)
{
val = this.GetFieldInfo(typeName, fieldName).GetValue(this);
}

private void FieldSetter(string typeName, string fieldName, object val)
{
FieldInfo fieldInfo = this.GetFieldInfo(typeName, fieldName);
if (fieldInfo.IsInitOnly)
{
throw new FieldAccessException(Environment.GetResourceString("FieldAccess_InitOnly"));
}
Message.CoerceArg(val, fieldInfo.FieldType);
fieldInfo.SetValue(this, val);
}

[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
protected override void Finalize()
{
}

private FieldInfo GetFieldInfo(string typeName, string fieldName)
{
Type baseType = this.GetType();
while (baseType != null)
{
if (baseType.FullName.Equals(typeName))
{
break;
}
baseType = baseType.BaseType;
}
if (baseType == null)
{
throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadType"), new object[] { typeName }));
}
FieldInfo field = baseType.GetField(fieldName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (field == null)
{
throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadField"), new object[] { fieldName, typeName }));
}
return field;
}

public virtual int GetHashCode()
{
return InternalGetHashCode(this);
}

[MethodImpl(MethodImplOptions.InternalCall)]
public extern Type GetType();
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool InternalEquals(object objA, object objB);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern int InternalGetHashCode(object obj);
[MethodImpl(MethodImplOptions.InternalCall)]
protected extern object MemberwiseClone();
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static bool ReferenceEquals(object objA, object objB)
{
return (objA == objB);
}

public virtual string ToString()
{
return this.GetType().ToString();
}
}

Comer 2008-11-28
  • 打赏
  • 举报
回复
想干吗?

开发个操作系统出来?
Foxer 2008-11-28
  • 打赏
  • 举报
回复
听说过Reflector吗?
有了它,.NET framework源代码随你看
另外,.NET framework已经可以看到源代码了,到网上找找资料吧,不过要用VS2008才行。
lgxysl 2008-11-28
  • 打赏
  • 举报
回复
非常好...建议你改学C++...
----------------------------------------
在我眼里所有的语言都是一样的,把这些类的C++源码贴出来也行.
我估计这些东西最终还是要调用API,不调用API,完全从0开始,这个TextBox类不知写得出不?
更深一层,有谁有API的源码(估计这个弄不到,微软是不会开发源代码的)
--------------------------------------------------------------
"微软是不会开发源代码的"改成"微软是不会开放源代码的"

晕倒!一个错别字,意思全相反!
liye9801 2008-11-28
  • 打赏
  • 举报
回复
有点困难...
加载更多回复(4)

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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