This could be either for the .NET or Mono compilers.I know that under certain conditions the compiler can inline functions (e.g. small, single call site, etc.) as an optimization.  However, if the function is public, then it needs to have an external entry point.  In these cases, is duplicated code generated (public entry point which isn't used by the internal code since the internal code uses the inlined version), or does marking it as public prevent the compiler from doing such an optimization?
Does setting a function public affect the C# compiler's ability to inline the function as an optimization?
c#;compiler;optimization;mono;scope
I found this interesting article on C# inline methods.Scope of a method doesn't appear to change when a function becomes an inline candidate. Here is a summary of that article.How to determine what gets inlined? The short answer is that you cant. The MSDN article Writing High-Performance Managed Applications : A Primer gives the following guidance:Methods that are greater than 32 bytes of IL will not be inlined.Virtual functions are not inlined.Methods that have complex flow control will not be in-lined. Complex flow control is any flow control other than if/then/else; in this case, switch or while.Methods that contain exception-handling blocks are not inlined, though methods that throw exceptions are still candidates for inlining.If any of the methods formal arguments are structs, the method will not be inlined.There is no inline keyword in C#, but there is an inline compiler directive that was introduced in .NET 4.5 called MethodImplOptions.AggressiveInlining It can be used like this.[MethodImpl(MethodImplOptions.AggressiveInlining)]static int Method2(){// ... Aggressive inlining.return one.Length + two.Length + three.Length +    four.Length + five.Length + six.Length +    seven.Length + eight.Length + nine.Length +    ten.Length;}You can't know for sure if the compiler will inline a function. This isn't feature C# developers have control over.