728x90
300x250

[C#.NET] 클래스 - 부모와 자녀의 파라메터 값을 중복 허용

만약 부모와 자녀가 갖고 있는 공통의 값이 예를 들자면 핸드폰이 있다고 칩시다.
cel이라는 파라메터가 둘 다 필요하게 될 것입니다.
자녀는 부모 없이 존재가능한가요?
즉 다시말하면 부모와 자녀와의 관계에서 공통적으로 갖는 특색이 중복되어야만 할 상황이 생길 때 해결하는 방법입니다.


1. 기본 클래스 방법(New 클래스를 이용)

이 예제에서 기본 클래스 BaseC 및 파생 클래스 DerivedC는 동일한 필드 이름 x를 사용하므로 상속된 필드의 값이 숨겨집니다.
이 예제는 new 한정자의 사용법을 보여 줍니다. 또한 정규화된 이름을 사용하여 기본 클래스의 숨겨진 멤버에 액세스하는 방법을 보여 줍니다.

using System;
public class BaseC
{
    public static int x = 55;
    public static int y = 22;
}
public class DerivedC : BaseC
{
    new public static int x = 100;
    static void Main()
    {
        Console.WriteLine(x);
        Console.WriteLine(BaseC.x);
        Console.WriteLine(y);
    }
}

100
55
22

이 예제에서 중첩 클래스는 기본 클래스에서 이름이 동일한 클래스를 숨깁니다. 이 예제에서는 new 한정자를 사용하여 경고 메시지를 제거하고 정규화된 이름을 사용하여 숨겨진 클래스 멤버에 액세스하는 방법을 보여 줍니다.


using System;
public class BaseC
{
    public class NestedC
    {
        public int x = 200;
        public int y;
    }
}
public class DerivedC : BaseC
{
    new public class NestedC
    {
        public int x = 100;
        public int y;
    }
    static void Main()
    {
        NestedC c1 = new NestedC();
        BaseC.NestedC c2 = new BaseC.NestedC();
        Console.WriteLine(c1.x);
        Console.WriteLine(c2.x);
    }
}

출력 : 100
         200



2. Virtual 선언과 Overide 이용


using System;

class Player
{
    virtual public void showMessage()
    {
        Console.WriteLine("Player 클래스의 메시지");
    }
}

class StarcraftPlayer : Player
{
    public override void showMessage()
    {
        Console.WriteLine("StarcraftPlayer");
    }
}

class Program
{
    static void Main()
    {
        StarcraftPlayer sp = new StarcraftPlayer();
        sp.showMessage();
        Player p = new Player();
        p.showMessage();
    }
}


반응형

'소프트웨어(SW) > MS - Visual C#.NET' 카테고리의 다른 글

[C#.NET] Base64  (0) 2010.12.22
[C#.NET] 클래스 - Overriding 개념  (0) 2010.11.24
[C#.NET] Out과 Ref의 차이점  (0) 2010.11.19
[C#.NET] foreach 문  (0) 2010.11.17
[C#.NET] 구조체 설명  (0) 2010.11.17
728x90
300x250

[Win2003] IIS 6 - ASP.NET CS0016 : Could not write to output file 에러 해결 방안

Compiler Error Message: CS0016: Could not write to output file ‘c:\WINDOWS\Microsoft.NET\Framework\버전\Temporary ASP.NET Files\myapp\xxxxx\xxxxx\App_GlobalResources.xxxxxxx.dll’ — ‘Access is denied.’

IIS6에 ASP.NET을 초기 설치 시 발생할 확률이 높은 오류입니다.
주로 컴파일러에 파일을 출력할 수 없을 때 발생하는 오류입니다.


1. 해결방안

32bit일 때 Framework 경로
C:\Windows\Microsoft.NET\Framework\버전\Temporary ASP.NET Files\
64bit일 때 Framework 경로
C:\Windows\Microsoft.NET\Framework64\버전\Temporary ASP.NET Files\

공통사항 임시 폴더
C:\Windows\Temp


Everyone과 Network Service의 권한을 전체 허용으로 해줍니다.
반응형
728x90
300x250

[C#.NET] Out과 Ref의 차이점

Out은 FillArray(임의 선언)에서 초기화를 합니다.

using System;
class TestOut
{
    static void FillArray(out int[] arr)
    {
        arr = new int[5] { 1, 2, 3, 4, 5 };
    }
    static void Main()
    {
        int[] theArray;
        FillArray(out theArray);
        Console.WriteLine("Array elements are:");
        for (int i = 0; i < theArray.Length; i++)
            System.Console.WriteLine(theArray[i] + " ");
        System.Console.WriteLine("Press any key to exit");
    }
}

Ref는 Main 메서드에서 초기화합니다.


using System;
class TestRef
{
    static void FillArray(ref int[] arr)
    {
        if (arr == null)
        {
            arr = new int[10];
        }
        arr[0] = 1111;
        arr[4] = 5555;
    }
    static void Main()
    {
        int[] theArray = { 1, 2, 3, 4, 5 };
        FillArray(ref theArray);
        System.Console.WriteLine("Array elements are:");
        for (int i = 0; i < theArray.Length; i++)
            System.Console.WriteLine(theArray[i] + " ");
        System.Console.WriteLine("Press any key to exit");
    }
}

반응형
728x90
300x250

[C#.NET] foreach 문
 

 

using System;
class Program
{

    static void Main(string[] args)
    {

        string[] studylang = { "C#", "Java", "Scala", "Powershell", "C", "Assembly", "XML" };

        foreach (string lang in studylang)
            Console.WriteLine(lang);

    }

}


데이터베이스 핸들링할 때 많이 사용합니다.
개념은 이렇습니다.

 C# Java Scala  Powershell  Assembly  XML 

studylang의 배열이 lang이라는 변수에 각각 한 번씩 들어가서 출력합니다.

반응형
728x90
300x250

[C#.NET] 구조체 설명

using System;
class Program
{

struct student{
public string name;
public byte age;

// 메서드 선언
public student(string n, byte b)
{
name = n;
age = b;
}
}

static void Main()
{
student Person;

Person.name = "정원영";
Person.age = 20;

// 메서드 이용
// student Person = new student(string n, byte b)

Console.Writeline("Person의 이름 : {0}, 나이 : {1}", Person.name, Person.age);
}
}


구조체는 C언어와 C++의 핵심이자 객체지향의 핵심입니다.
클래스라는 개념도 바로 구조체라는 것을 통해 만들어졌습니다.
위의 예제는 구조체를 쉽게 이해하고자 하는 분께 많은 도움이 될 것입니다.

반응형

+ Recent posts