Clayman的专栏

It's all about XNA & GPU Programming

用户操作
[即时聊天] [发私信] [加为好友]
claymanID:soilwork
193819次访问,排名381好友0人,关注者14
soilwork的文章
原创 85 篇
翻译 15 篇
转载 0 篇
评论 331 篇
clayman的公告
嘿嘿 ^o^....
最近评论
yfl83:看来xna人气不是很旺,不过加油,多写一些!
ffffk:研究到这的都是高手
jym5596337:我也不知道我怎么就走到了你的路上来了呵呵...
太晕了,我们专业就学的C#... 那我就凑合着用它学习MDX喽,但到了2008你的这个时期,感觉形式有点尴尬,以前的人说 在中国搞软件是 前有微软,后有盗版。
现在是 前有XNA后有C++ ... MDX 学习资料太太太难找了。。太太太少了。 师兄给介绍下你学历路途中的资料目录咯。。。我好找来学习咯。。 感谢哦感谢。。
jym5596337:好象没有继续哇 ...
shapin:ATI的网站有个支持HLSL语法高亮的vs插件,可以支持其他版本,只要修改相应的那个注册表就行
文章分类
收藏
    相册
    blogs
    David Weller
    nVidia Developer blog
    Rico Mariani
    Shawn Hargreaves
    XNA Team blog
    XNA资源
    XNA Creators Club
    ZBuffer
    Ziggyware XNA Resources
    中国XNA开发网
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 值类型属性??收藏

    新一篇: Shaderey――非真实渲染 | 旧一篇: simple water without reflection

             再一次由于C#中值类型和引用类型的区别 犯了错误。
             假设在类中包含一些值类型的成员(比如结构,数组),你希望为外部程序提供访问和修改这些成员的能力,同时又不想直接暴露成员,在c#中最常见的做法就是为这样的成员添加一个属性:

    struct Matrix
    {
           
    float m11;
           
    float m12;
           ...............
           
    float m44;
    }


    class MyClass
    {
             
    private Matrix _matrix;
             
    public Matrix MyMatrix
             
    {
                  
    get{return _matrix;} 
                  
    set{_matrix = value:}

               }

    }

            这看起来是最正常不过的代码了。可是当你希望单独修改属性中的某个成员时,问题就来了:

    MyClass test = new MyClass()
    test.MyMatrix.m11 
    = 1.0f;

          上面两行代码初看起来似乎没有什么问题,可是当你编译时,编译器会告诉你test.MyMatrix.m11不是一个变量,无法为他赋值!!问题出在哪里呢?好吧,注意了,Matrix是一个值类型,对于值类型来说,总是按值传递的。我们把上面一行代码“翻译”一下它等价于:

    Matrix temp = test.MyMatrix;
    temp.m11 
    = 1.0f;

         现在看到问题所在了把,我们先获得了MyMatrix属性的一个拷贝,然后对这个拷贝赋值,显然,由于temp只是一个临时的中间变量,所以这样的代码是没有意义的。因此C#编译器把它做为了一个编译错误。

        这似乎是一个语言上的缺陷,通常由于性能上的考虑,才会把数据设计为值类型,但在这里,如果我们需要为结构中的某个成员进行修改,就不得不更新整个结构,因为只有test.MyMatrix = someValue才能正常工作。当然,你也许还可以把_matrix直接作为公共成员(这样可能失去一些必要的保护措施),或者为值类型中的每个成员写一个属性(如果你足够疯狂的话),但似乎始终无法获得一引用类型一样简便的访问方法。

     

    发表于 @ 2007年01月10日 03:48:00|评论(loading...)|编辑

    新一篇: Shaderey――非真实渲染 | 旧一篇: simple water without reflection

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © clayman