If you think about it, all .Net languages contain mostly only pointers. Every time you assign a type to a variable, that variable contains only a pointer to the object in memory.
Besides, I am unaware of any algorithm that has specific requirements in its implementation. Sure some implementations will be more efficient than others, but the whole point of an algorithm is to provide information as to how to produce an implementation. Do you HAVE to use a multiplication instruction to obtain a product? Surely you can obtain the same result with only successive additions, it will just take more time.