妥協...

namespace Hoge {
    public ref class A {};
    public ref class B {};
    public ref class R {};
    static const R^ Func( A^ a, B^ b ) {...}
};

上記のようなコードからDLLを作成し,C#側から利用したいのですが,クラスA,B,Rは利用できるのに,Func関数は利用できません.
どうにも困ってしまったので,とりあえず,

namespace Hoge {
    public ref class A {};

    ref class R;
    public ref class B {
    public:
        static const R^ Func( A^ a, B^ b );
    };
    
    public ref class R {};
    const R^ B::Func( A^ a, B^ b ) {...}
};

のようにしました.これ,いいのかな...

↓実際のコードはこんな感じ...

// Vector.h
namespace KrdLab {
    namespace Numerical {
        
        //
        // ここには,いろいろ...
        //
        
        ref class Matrix;
        
        // 列ベクトル
        public ref class ColVector : public Vector {
        public:
        
            ...
        
            /*
            ColumnベクトルとRowベクトルの積から行列を生成する.
            */
            static const Matrix^ operator*( ColVector^ cv, RowVector^ rv );
        };
    }
}

// Matrix.h
namespace KrdLab {
    namespace Numerical {

        // 行列クラス
        public ref class Matrix {
            // いろいろ...
        };
        
        // 行列を生成する演算
        const Matrix^ ColVector::operator*( ColVector^ cv, RowVector^ rv )
        {
            // Matrix,ColVector,RowVectorを使って,いろいろ...
        }
    }
}

上記のように書くと,C#側から利用する際,イメージ通りの記述ができます.

using KrdLab.Numerical;

ColVector cv = new ColVector(2);
RowVector rv = new RowVector(2);
cv[0] = 3; cv[1] = 4;
rv[0] = 3; rv[1] = 4;

Matrix m = cv * rv;

ところで,Matrix m = cv * rv;の部分なのですが,こういう書き方はC++的発想なのでしょうか?(^_^;