2017-10-17 53 views
-3

我想处理一个简单的结构。所有我需要的结构中的所有变量都将被用作连接字符串。我不打算为列出的变量分配任何新值。我知道如何在课堂上做同样的事情,但现在我想发现如何打击结构。此外,我不需要这些参数字符串P1等在构造函数中,但没有他们,我收到一个错误。请帮助)在C中使用结构的正确方法#

public struct ConnectionString 
{ 
    // vars declaration 
    public string ip, login, password; 

    // struct constructor 
    public ConnectionString(string p1, string p2, string p3) 
    { 
     ip = "192.168.1.1"; 
     login = "boris"; 
     password = "123456"; 
    } 
} 

但是,当我把它,我有一个空的输出:

ConnectionString ss = new ConnectionString(); 
Console.WriteLine("connection string: " + ss.password); 
+1

好的,但是你的问题是什么?你有什么问题? *为什么*你想为此使用一个结构? – Amy

+3

“如何用结构来做到这一点”:不。结构是用于特殊情况,这不是其中之一。值类型语义在这里没有用。 –

+0

@HenkHolterman这些案件是什么? –

回答

0

相反的:

public ConnectionString(string p1, string p2, string p3) ..... 

使用:

public static ConnectionString Create() 
{ 
    return new ConnectionString { ip = "a", login = "b", password = "c" }; 
} 

并使用:

ConnectionString ss = ConnectionString.Create(); 

这是假设你必须使用一个struct,当然。

+0

如果我像你说的那样调用构造函数:ConnectionString ss = new ConnectionString.Create();我gettig一个错误的严重性\t代码\t说明\t项目\t文件\t线\t抑制状态 错误\t CS0426 \t类型名称“创建”的类型不存在“的ConnectionString” \t SadRecreate –

+0

@DiegoSlinger您必须添加代码在它之前('public static ConnectionString Create()......')在结构体'ConnectionString'内。 – ispiro

+0

我的代码看起来是这样的:命名空间StarterProject { \t公共结构的ConnectionString \t { \t \t //瓦尔声明 \t \t公共字符串IP,登录名,密码; \t \t //结构构造 \t \t公共静态的ConnectionString创建() \t \t { \t \t \t回新的ConnectionString {IP = “A”,登录= “B”,密码= “C”}; \t \t} \t}} –

2
// struct constructor 
public ConnectionString(string p1, string p2, string p3) 
{ 
    ip = "192.168.1.1"; 
    login = "boris"; 
    password = "123456"; 
} 

但是,当我把它,我有一个空的输出:

ConnectionString ss = new ConnectionString(); 
Console.WriteLine("connection string: " + ss.password); 

你是不是叫你定义的构造函数;你正在调用隐式生成的默认构造函数,这就是为什么没有填充字段的原因。

编辑:从documentation,注意以下几点:

在结构声明,字段不能,除非它们被声明为const或静态初始化。

选项:

1)删除您的构造函数和声明领域const并提供值,即

public struct ConnectionString 
{ 
    // vars declaration 
    public const string ip = "192.168.1.1"; 
    public const string login = "boris"; 
    public const string password = "123456"; 
} 

2)调用默认的构造函数后填充这些领域,

3 )调用你定义的构造函数(带参数),

4)(最好的o ption)不使用结构来解决这个问题。

参考:Using Structs (C# Programming Guide)

+0

没问题。如果您想接受答案,请点击答案旁边的绿色复选标记。 –

0

既然你不使用它里面的构造函数传递的参数,你可以把它叫做如下图所示。 As others have already commented, getting connection string is not something, you should do with struct.当一组相关的参数和功能被集中使用时,通常使用结构体,并且为更小范围的呼叫设置可用结构体。它们通过价值传递,而不是通过参考。

ConnectionString connect = new ConnectionString("","",""); 
Console.WriteLine("connection string: " + connect.password);