C# 如何在c中向类传递变量#
我有一个简单的代码:C# 如何在c中向类传递变量#,c#,class,variables,C#,Class,Variables,我有一个简单的代码: class ResourceInterceptor: IResourceInterceptor { public bool OnFilterNavigation(NavigationRequest request) { return false; } ResourceResponse IResourceInterceptor.O
class ResourceInterceptor: IResourceInterceptor
{
public bool OnFilterNavigation(NavigationRequest request)
{
return false;
}
ResourceResponse IResourceInterceptor.OnRequest(ResourceRequest request)
{
request.Referrer = "http://www.google.com";
return null;
}
}
我需要向类传递一个变量(只需读取它,不进行编辑),但如果我在类中插入一个未声明的变量,则会出现以下错误:
无法访问外部类型的非静态成员
通过嵌套类型设置“WindowsFormsApplication1.Form1”
“WindowsFormsApplication1.Form1.ResourceInterceptor”
例如,我需要这样的东西(显然不行!)
可以使用初始化构造函数。例如:
class ResourceInterceptor: IResourceInterceptor
{
public ResourceInterceptor(string referer)
{
m_Referer = referer;
}
public bool OnFilterNavigation(NavigationRequest request)
{
return false;
}
ResourceResponse IResourceInterceptor.OnRequest(ResourceRequest request)
{
request.Referrer = m_Referrer;
return null;
}
private string m_Referer;
}
然后在创建类的实例时,只需将referer传递给构造函数:
ResourceInterceptor interceptor = new ResourceInterceptor("www.google.com");
如果在所有类实例中只需要该变量,另一种解决方案是使用类(
静态
)属性:
class ResourceInterceptor : IResourceInterceptor
{
// Public class property.
public static string Referer { get; set; }
ResourceResponse IResourceInterceptor.OnRequest(ResourceRequest request)
{
request.Referrer = Referer;
return null;
}
}
// Somewhere else...
ResourceInterceptor.Referer = "www.google.com";
在此之后,所有
ResourceInterceptor
实例将共享相同的Referer
类属性。您需要在哪里传递什么?请说明您实际在尝试什么。请提供一个,这是一个简短的可编译示例。这只是一段随机代码。能否将引用者设置为公共静态字符串引用者?@SenJacob公共可编辑字段不应存在。。也许是通过一处房产,不过这是一篇不错的文章。公共字段和封装本身没有问题。但是,在IMO中,string Refererrer{get;set;}
与公共字段一样简单,而且以后更容易重构为备份存储,因为您不必更改调用代码。如果字段是复杂类型,那么属性也可以给出所使用的公共接口,从而更轻松地进行重构。在这种情况下,使用静态字段而不是静态属性更容易。
class ResourceInterceptor : IResourceInterceptor
{
// Public class property.
public static string Referer { get; set; }
ResourceResponse IResourceInterceptor.OnRequest(ResourceRequest request)
{
request.Referrer = Referer;
return null;
}
}
// Somewhere else...
ResourceInterceptor.Referer = "www.google.com";