Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中向类传递变量#_C#_Class_Variables - Fatal编程技术网

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";