2017-10-17 1 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

"구조체와 함께하는 방법": NOT. Structs는 특별한 경우를위한 것이며, 이것들 중 하나가 아닙니다. 값 유형 의미론은 여기서 사용되지 않습니다. –

+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(); 

이것은 구조체를 사용해야한다는 것을 전제로합니다. 내가 그것을 호출 할 때

+0

당신이 말한 것처럼 생성자를 호출하면 : ConnectionString ss = new ConnectionString.Create(); 나는 유형에 존재하지 않는 오류 심각도 \t 코드 \t 설명 \t 프로젝트 \t 파일 \t 라인 \t 억제 상태 오류 \t CS0426 \t 유형 이름 '만들기'를 gettig하고 '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) (best 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); 
관련 문제