是否有可能在.NET 3.5上用C#创建VB.net模块?

问题描述:

我需要使用VB.net的某些功能,这是我的Asp.net MVC项目的模块。但是我发现C#不能像VB.net那样处理模块。请看下面的代码。是否有可能在.NET 3.5上用C#创建VB.net模块?

VB.Net - 全球化项目

Public Module [Module Name] 
    Public Const WebsiteName As String = "[My Website Name]" 
End Module 

VB.Net - Asp.net MVC查看页面

<%@ Import Namespace="[Globalization Project Namespace]" %> 

<%= WebsiteName %> 

C#.NET - Asp.net MVC查看页面

<%@ Import Namespace="[Globalization Project Namespace]" %> 

<%= WebsiteName    // Error because C# doesn't understand this statement %> 
<%= [Module Name].WebsiteName // It works fine. %> 

我认为C#可以看到像类一样的所有模块。所以,我不能直接调用它没有给模块名称。你有解决这个问题的想法吗?

PS.1我知道。模块不正确OOP。但它短暂而强大。

PS.2我可以使用VB.net进行全球化项目,因为所有的源代码都将由我的自定义宏生成。但我不喜欢在VB.net中编写源代码。所以,我不使用VB.net作为Asp.net MVC View Page或其他项目的主要语言。

感谢,

没有,C#没有任何等同于VB.NET模块。

(在VB.NET中,访问将完全由编译器合格。)

你可能会埃里克利珀在this blog post有兴趣,虽然,谈论包括在未来的版本“*”方法的可能性。

+0

请看看我的答案。 – 2009-07-23 09:36:45

静态类是C#相当于一个VB模块:

public static class MyCSharpModule 
{ 
    public const string WebsiteName = "[My Website Name]"; 
} 

嗯,这是从模块的C#用户相同的,因为在C#中,你必须指定类名,即使是创建为VB模块。如果从VB引用,你需要的,如果它来自一个C#DLL到指定的类名,但如果它来自一个VB DLL ...

你可以尝试使用一些推广到Page类:

public static class MyExtentions 
{ 
    public static string WebsiteName(this System.Web.Mvc.ViewMasterPage page) 
    { 
     return "[My Website Name]"; 
    } 
} 

在页面,你会称其为网页上的方法:使用

<%= WebsiteName(); %> 
+0

不等同。因为我必须在调用其属性的字段之前指定类名称。 – 2009-07-23 09:32:40

+0

我只是试试它。但我需要使用这个关键字来调用你的方法。而且,这个想法不能用于另一种情况,因为它是扩展方法。 – 2009-07-23 09:42:03

没有直接等价于C#中的VB.NET模块,然而,对于大多数应用中,我发现一个公共的静态类(在你最“*”的命名空间)就足够了。
(尽管如此,您仍然必须使用类名称限定成员和方法)。

喜欢的东西:

namespace MyApplication 
{ 
    public static class Globals 
    { 
     public const string app_name = "This is my application name!"; 
    } 
} 

,并使用它像这样:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string s = Globals.app_name;       
     } 
    } 
} 

对于全球可用的恒定值(如应用程序名称,版本号等),它通常工作得很好。

我发现了一些可能性。让我们看看我的源代码。

C# - 全球化项目

namespace [SolutionName].Globalization.Shared 
{ 
    public class Site : System.Web.Mvc.ViewMasterPage 
    { 
     public static [PropertyName] { get;set; } 
    } 
} 

我想,你知道什么会发生下一次!

C# - Asp.net MVC查看页面在同一视图部分

<%@ Master Language="C#" Inherits="[SolutionName].Globalization.Shared.Site" %> 
<%@ Import Namespace="[SolutionName].Globalization.Shared" %> 

<%= [PropertyName] %> 

C# - Asp.net MVC查看页面在同一视图部分

<%@ Import Namespace="[SolutionName].Globalization.Shared" %> 

<%= Site.[PropertyName] %> 

C# - 天冬氨酸.net MVC查看页面不同查看区域

<%@ Import Namespace="[SolutionName].Globalization" %> 

<%= Shared.Site.[PropertyName] %> 

对不对?我认为这是非常漂亮的源代码。你有什么建议吗?请告诉我。

PS.1我唯一担心的就是我的全球化项目。这很奇怪,因为这个项目中的类几乎都是从Asp.net MVC项目中的View Page类继承而来的。

PS.2别担心创建上面的代码。因为我将使用VS宏来生成&修改所有这些。

感谢,