none
C#的類別比較 RRS feed

  • 問題

  • 最近在研究XNA的Platformer範例程式

    其中有一段一直搞不懂

    if (Animation == animation)
        return;

    Animation 是一個類別

    所以應該是類別的比較

    但是我學 Visual Basic 的經驗裡,類別之間的比較要實作運算子

    在Animation類別裡卻看不到任何運算子的實作

    所以我想了解之間的運作方式

    以及如果要移植到 Visual Basic 的話,要如何修改。

    2010年8月2日 下午 03:38

解答

  • Hi,

    先確認是否真的是類別

    看看有沒有名為Animation的屬性或是欄位

    或是直接按右鍵移至定義看看


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已提議為解答 DK. Da 2010年8月3日 上午 05:33
    • 已標示為解答 國中生 2010年8月7日 下午 03:09
    2010年8月3日 上午 04:58
  • 您這個例子比較特殊, Animation是型態, 也是屬性:

    public Animation Animation
            {
                get { return animation; }
            }

    在以下的語法中Animation是屬性:

       if (Animation == animation)
                    return;

    • 已標示為解答 國中生 2010年8月7日 下午 03:09
    2010年8月3日 上午 07:03
  • Hi,

    請改用is判斷


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 國中生 2010年8月7日 下午 03:09
    2010年8月3日 上午 10:11

所有回覆

  • Hi,

    先確認是否真的是類別

    看看有沒有名為Animation的屬性或是欄位

    或是直接按右鍵移至定義看看


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已提議為解答 DK. Da 2010年8月3日 上午 05:33
    • 已標示為解答 國中生 2010年8月7日 下午 03:09
    2010年8月3日 上午 04:58
  • 我確認了,是類別

    struct AnimationPlayer

    {

            public Animation Animation
            {
                get { return animation; }
            }
            Animation animation;

            public void PlayAnimation(Animation animation)
            {
                // If this animation is already running, do not restart it.
                if (Animation == animation)
                    return;

                // Start the new animation.
                this.animation = animation;
                this.frameIndex = 0;
                this.time = 0.0f;
            }

    }

    以下是Animation 類別的

    class Animation
    {

            public Texture2D Texture
            {
                get { return texture; }
            }
            Texture2D texture;


            public float FrameTime
            {
                get { return frameTime; }
            }
            float frameTime;


            public bool IsLooping
            {
                get { return isLooping; }
            }
            bool isLooping;


            public int FrameCount
            {
                get { return Texture.Width / FrameWidth; }
            }

            public int FrameWidth
            {
                // Assume square frames.
                get { return Texture.Height; }
            }


            public int FrameHeight
            {
                get { return Texture.Height; }
            }


            public Animation(Texture2D texture, float frameTime, bool isLooping)
            {
                this.texture = texture;
                this.frameTime = frameTime;
                this.isLooping = isLooping;
            }
    }

    2010年8月3日 上午 06:19
  • 那個很明顯是屬性
    2010年8月3日 上午 06:33
  • 您這個例子比較特殊, Animation是型態, 也是屬性:

    public Animation Animation
            {
                get { return animation; }
            }

    在以下的語法中Animation是屬性:

       if (Animation == animation)
                    return;

    • 已標示為解答 國中生 2010年8月7日 下午 03:09
    2010年8月3日 上午 07:03
  • 嗯 ,我知道了。

    但是問題還是沒解決。

    把C#

            public Animation Animation
            {
                get { return animation; }
            }
            Animation animation;   

         public void PlayAnimation(Animation animation)
            {
                if (Animation == animation)
                    return;

                this.animation = animation;
                this.frameIndex = 0;
                this.time = 0.0f;
            }

    改成 Visual Basic 

        Public ReadOnly Property Animation() As Animation
            Get
                Return V_animation
            End Get
        End Property

        Private V_animation As Animation

        Public Sub PlayAnimation(ByVal animation_ As Animation)

            If Animation = animation_ Then
                Exit Sub
            End If


            V_animation = animation_
            V_frameIndex = 0
            time = 0.0F
        End Sub

    Animation = animation_ 會有「型別 'Animation' 和 'Animation' 的運算子 '=' 未定義。」的錯誤

    要如何解決呢

    2010年8月3日 上午 07:33
  • Hi,

    請改用is判斷


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 國中生 2010年8月7日 下午 03:09
    2010年8月3日 上午 10:11